一、Node.js

1. Hello World

var  http  =  require('http');
http.createServer(function(request, response) {
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此访问
console.log('访问');
response.write('hello,world');
response.end('hell,世界');//不写则没有http协议尾,但写了会产生两次访问
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/'); /*
启动服务
cmd下执行:
node n1_hello.js
浏览器访问:http://localhost:8000
*/

2. 函数调用

//---服务器node.js---
var http = require('http');
var otherfun = require('./models/otherfuns.js');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此访问
fun1(response);
otherfun.controller(request,response);
otherfun.call(response);
//---使用字符串调用对应的函数---
funcname = "addContent"
otherfun[funcname](response);
otherfun['getVisit'](response);
response.end('');
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
//---普通函数---
function fun1(res){
res.write("你好,我是fun1");
}
//---/models/otherfuns.js---
function controller(req,res){
res.write("发送");
call('hello',req,res);
res.end("");
}
function call(res){
console.log('call');
}
module.exports = controller; //只支持一个函数
//只支持多个函数
module.exports={
getVisit:function(){
return visitnum++;
},
addContent:function(a,b){
return a+b;
}
}

3. 模块调用

//---node.js---
var http = require('http');
//var User = require('./models/User');
var Teacher = require('./models/Teacher');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){ //清除第2此访问
//实例化teacher对象
teacher = new Teacher(1,'李四',30);
teacher.teach(response);
response.end('');
}
}).listen(8000);
//---User.js--
function User(id,name,age){
this.id=id;
this.name=name;
this.age=age;
this.enter=function(){
console.log("进入图书馆");
}
}
module.exports = User;
//---models/Teacher.js---
var User = require('./User');
function Teacher(id,name,age){
//没有构造方法,继承父类
User.apply(this,[id,name,age]);
this.teach=function(res){
res.write(this.name+"老师讲课");
}
}
module.exports = Teacher;

4. 路由

//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
if(request.url!=="/favicon.ico"){
//获取url的路径
var pathname = url.parse(request.url).pathname;
//替换掉路径前面的 /
pathname = pathname.replace(/\//,'');
router[pathname](request,response);
response.end('');
}
}).listen(8000);
//---router.js---
module.exports={
login:function(req,res){
res.write("我是login方法");
},
zhuce:function(req,res){
res.write("我是注册方法");
}
}

5. 文件读取

//---node.js---
var http = require("http");
var optfile = require("./models/optfile");
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
if(request.url!=="/favicon.ico"){
//闭包函数;防止异步操作时,已经end了,再进行write报错
function recall(data){
response.write(data);
response.end('ok')
}
optfile.readfile('./views/login.html',recall);
console.log('主程序执行完毕');
}
}).listen(8000)
//---/models/optfile---
var fs = require('fs');
module.exports={
//同步读取
readfileSync:function(path){
var data = fs.readFileSync(path,'utf-8');
console.log("同步方法执行完毕");
return data;
},
//异步读取
readfile:function(path,recall){
fs.readFile(path,function(err,data){
if(err){
console.log(err);
}else{
console.log(data.toString());
recall(data);
}
})
}
}
//---修改后路由---
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var optfile = require("./models/optfile");
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
if(request.url!=="/favicon.ico"){
//获取url的路径
var pathname = url.parse(request.url).pathname;
//替换掉路径前面的 /
pathname = pathname.replace(/\//,'');
router[pathname](request,response);
console.log('主程序执行完毕');
}
}).listen(8000)
//---router.js---
var optfile = require("./models/optfile");
module.exports={
login:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.readfile('./views/login.html',recall);
},
zhuce:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.readfile('./views/zhuce.html',recall);
}
}

6. 文件写入

//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var optfile = require("./models/optfile");
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type':'text/html';charset=utf-8'});
if(request.url!=="/favicon.ico"){
//获取url的路径
var pathname = url.parse(request.url).pathname;
//替换掉路径前面的 /
pathname = pathname.replace(/\//,'');
router[pathname](request,response);
console.log('主程序执行完毕');
}
}).listen(8000)
//---/models/optfile---
var fs = require('fs');
module.exports={
//同步写入
writefileSync:function(path,data){
fs.writeFileSync(path,data);
console.log("同步方法执行完毕");
},
//异步读取
writefile:function(path,data,recall){
fs.writeFile(path,data,function(err){
if(err){
throw err;
}else{
console.log("It is saved!");
recall('写文件成功')
}
})
}
}
//---router.js---
var optfile = require("./models/optfile");
module.exports={
login:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.readfile('./views/login.html');
},
writefile:function(req,res){
function recall(data){
res.write(data);
res.end("");
}
optfile.writefile('./views/one.txt','hello world',recall);
}
}

7. 读取图片

//---node.js---
var http = requrie('http');
var optfile = require('./models/optfile');
http.createServer(function(request,response){
//读取图片需要时二进制流格式
response.writeHead(200,{'Content-Type':'image/jpeg'});
if(request.url!='/favicon.ico'){
optfile.readImg('./imgs/pig.png',response);
}
}).listen(8000);
//---/models/optfile---
var fs = require('fs');
module.exports={
readImg:function(path,res){
//默认为string,binary是二进制
fs.readFile(path,'binary',function(err,filedata){
if(err){
console.log(err);
return;
}else{
res.write(filedata,'binary');
res.end();
}
})
}
}

8. 异常处理

//同步捕获异常
pathname = url.parse(request.url).pathname;
pathname = pathname.replace(/\//,'');
try{
router[pathname](request,response);
}catch(err){
console.log("error="+err);
response.writeHead(200,{'Content-Type':'text/html';charset='utf-8'});
response.write(err.toString());
response.end('');
}
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
var exception = require('./models/Exception');
http.createServer(function (request,response){
if(request.url!=="/favicon.ico"){//清除第2此访问
pathname=url.parse(request.url).pathname;
pathname = pathname.replace(/\//,'');//替换掉前面的/
try{
//router[pathname](request,response);
data = exception.expfun(0);
response.write(data);
response.end('');
}catch(err){
console.log('aaaaa='+err);
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
response.write(err.toString());
response.end('');
}
console.log("server执行完毕");
}
}).listen(8000);
//---Exception.js---
module.exports={
expfun:function(flag){
if(flag==0){
//抛出异常
throw '我是例外';
}
return "success";
}
}

9. 参数接收

<form action='./login' method='get'>
<input type='text' name='email'/>
<input type='password' name='pwd'/>
<input type='submit' value='登录'>
</form>
//---node.js---
var http = require('http');
var url = require('url');
var router = require('./router');
http.createServer(function(request,response){
if(request.url!=="/favicon.ico"){ //清除第2此访问
pathname=url.parse(request.url).pathname;
pathname = pathname.replace(/\//,'');//替换掉前面的/
try{
router[pathname](request,response);
}catch(err){
console.log('出错='+err);
response.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
response.write(err);
response.end('');
}
console.log("server执行完毕");
}
}).listen(8000);
//---router.js--
var optfile = require('./models/optfile');
var url = require('url');
var querystring = require('querystring'); //post需导入
module.exports={
login:function(req,res){
//--------get方式接收参数----------------
var rdata = url.parse(req.url,true).query;
console.log(rdata);
if(rdata['email']!=undefined){
console.log(rdata['email']);
} //-------post方式接收参数----------------
var post = '';//定义了一个post变量,用于暂存请求体的信息
//通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on('data', function(chunk){
post += chunk;
}); //-------注意异步-------------
//在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
req.on('end', function(){
post = querystring.parse(post);
console.log('email:'+post['email']+'\n');
console.log('pwd:'+post['pwd']+'\n');
});
//---------------------------------------
data = optfile.readfileSync('./views/login.html');
res.write(data);
res.end();
}
}

Node.js—学习的更多相关文章

  1. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  2. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  3. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

  4. node.js学习(1)

    新建便笺 3 node.js学习(1) 1)安装 http://nodejs.org/download/下载. 2)编写一个案例 var http=require("http"); ...

  5. 我的Node.js学习历程

    学习一门技术,每个人都有每个人的方法.我的方法很简单,做项目. 基本概念 在搭建一个node网站之前,还是要掌握一些基本的概念的,这里列举一下,具体的内容大家自己到网上去查: npm bower ex ...

  6. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  7. Node.js学习起步

    Node.js学习: 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱 ...

  8. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  9. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

  10. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

随机推荐

  1. Windows 10 任务栏添加网易云音乐控制按钮

      软件背景: 算是老帖新发,之前有朋友分享过一个很好用的工具,但可能是因为网易云软件更新后,导致控件失灵了,只剩下歌词控件有用了,所以今天用python重新写了一个小工具,发出来分享给大家,附上之前 ...

  2. 我的朋友&值得学习的大佬

    @media only screen and (max-width: 360px) { #friedsGroup { columns: 1 !important; } } #MySignature{ ...

  3. DenyHosts

    下载软件并解压cd DenyHosts-2.6 #进入安装解压目录python setup.py install #安装DenyHostscd /usr/share/denyhosts/ #默认安装路 ...

  4. LeetCode 5129. 下降路径最小和 II Minimum Falling Path Sum II

    地址 https://leetcode-cn.com/contest/biweekly-contest-15/problems/minimum-falling-path-sum-ii/ 题目描述给你一 ...

  5. hebust-fengyu

    三人行必有我师焉,择其善者而从之,其不善者而改之. 入则无法家拂士,出则无敌国外患者,国恒亡,然后知生于忧患而死于安乐也. 狡兔死走狗烹,飞鸟尽良弓藏,敌国尽谋臣亡 今齐地方千里,百二十城,宫妇左右莫 ...

  6. React: React的复合组件

    一.介绍 不论Web界面是多么的复杂,它都是由一个个简单的组件组合起来实现的,既然会创建一个简单的组件,那么复杂的组件就有了下手的切入点了.现在来实现一个简单的复合组件.一个颜色面板,一共三部分组成. ...

  7. python 各层级目录下的import方法

    ---恢复内容开始--- 以前经常使用python2.现在很多东西都切换到了python3,发现很多东西还是存在一些差异化的.跨目录import是常用的一种方法,并且有不同的表现形式,新手很容易搞混. ...

  8. 定时锁屏程序,Python祝你原理猝死!

    高以翔事件 11月27日在<追我吧>第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院.经过两个多小时的全力抢救,医院最终宣 ...

  9. C# Event在.Net规则下由接口定义的实现

    最近在学C#(教材<C# in a nutshell>很不错的说),看完delegate(委托)以后,紧接着就是event(事件)了,个人对跟.Net相关的东西并没有什么兴趣(毕竟是会增加 ...

  10. 定时任务之SpringSchedule的注意事项

    在我们现在的项目中,或多或少的都会涉及到定时任务,Spring在3.0之后引入了SpringSchedule,这让我们在使用Spring的时候,可以很容易的整合SpringSchedule.但是好用归 ...