一、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. JVM 类的加载机制

    在对类的实例化之前.JVM 一般会先进行初始化 主要经过如下几个阶段: 1.加载                       类加载的第一阶段,类加载时机有两个: 1.预加载:当虚拟机启动时,会预加载 ...

  2. canvas详解----绘制线条

    <!DOCTYPE html> <html> <head> <title>canvas详解</title> </head> &l ...

  3. Day3 - Python基础3 函数基本、递归函数、内置函数

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 2.2. 函数变量作用域 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 1. 函数基本语法及 ...

  4. 解决“QGtkStyle could not resolve GTK……”问题

    如果出现错误 QGtkStyle could not resolve GTK. Make sure you have installed the proper libraries 或者出现错误 err ...

  5. 利用 ROW_NUMBER() OVER ( ORDER BY 进行选择性排序,按不同字段进行排序处理,分页

    --就在OVER order by 中用case语句进行判断. IF ( OBJECT_ID('tempdb..#TempTable') IS NOT NULL ) DROP TABLE #TempT ...

  6. Linux运维基础篇大全

    基础知识的文章都在这里https://www.jianshu.com/u/a3c215af055a ,想要了解,请访问这个地址!!!!

  7. Spring Cloud 教程

    Spring Cloud系列教程: Spring Boot + Spring Cloud 构建微服务系统(一):服务注册和发现(Consul) Spring Boot + Spring Cloud 构 ...

  8. 【LOJ2402】「THUPC 2017」天天爱射击 / Shooting(整体二分)

    点此看题面 大致题意: 有\(n\)个区间,每个区间有一个权值,当权值变成\(0\)时消失.每个时刻将覆盖某一位置的所有区间权值减\(1\),求每个时刻有多少个区间在这一刻消失. 前言 整体二分裸题啊 ...

  9. electron内监控目标网站cookie的变化,查找指定的cookie

    let cookieInstance = win.webContents.session.cookies; cookieInstance.on('changed', (e, cookie, cause ...

  10. 在生成.net core 3.0程序时不包含nuget库

    在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...