Node.js创建Web、TCP服务器
使用http模块创建Web服务器
Web服务器的功能:
接受HTTP请求(GET、POST、DELETE、PUT、PATCH)
处理HTTP请求(自己处理,或请求别的程序处理)
做出响应(返回页面、文件、各类数据等)
常见的Web服务器架构:
Nginx、Apache:负责接受HTTP请求,确定谁来处理请求,并返回请求的结果
php-fpm/php模块:处理分配给自己的请求,并将处理结果返回给分配者
常见请求种类:
请求文件:包括静态文件(网页、图片、前端JavaScript文件、css文件...),及由程序处理得到的文件
完成特定的操作:如登录、获取特定数据等
Node.js的Web服务器:
不依赖其他特定的Web服务器软件(如Apache、Nginx、IIS......)
Node.js代码处理请求的逻辑
Node.js代码负责Web服务器的各种“配置”
使用Express创建Web服务器
简单的Express服务器
静态文件服务
路由
中间件
简单的Express服务器:
varexpress=require('express');
varapp=express();
app.get('',function(req,res){
res.end('hello\n');
});
app.listen(18001,functionafterListen(){
console.log('expressrunningonhttp://localhost:18001');
});
静态文件范围:
网页、纯文本、图片、前端JavaScript代码、CSS样式表文件、媒体文件、字体文件
使用Express访问静态文件
app.use(express.static('./public'));
路由:
将不同的请求,分配给相应的处理函数
区分:路径、请求方法
三种路由实现方法:
path:比较简单
Router:比较适合同一个路由下的多个子路由
route:比较适合API
中间件
Connect:Node.js的中间件框架
分层处理
每层实现一个功能
创建TCP服务器
使用net模块创建TCP服务器
使用telnet连接TCP服务器
使用net创建TCP客户端
利用node.js搭建简单web服务器JS代码部分:
varhttp=require('http');
varurl=require('url');
varpath=require('path');
varfs=require('fs');
vardir,arg=process.argv[2]||'';//命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
//比如使用命令nodeserverdebug,意思就是debug文件夹与server.js文件同级
//且你想以debug文件夹启动web服务
http.createServer(function(req,res){
varpathname=__dirname+url.parse(req.url).pathname;
dir=dir?dir:pathname;//记住dir(目录)
pathname=dir?pathname.replace(dir,dir+arg+'/'):pathname;//替换文件静态路径
if(path.extname(pathname)==""){
pathname+="/";
}
if(pathname.charAt(pathname.length-1)=="/"){
pathname+="index.html";//入口文件,此处默认index.html
}
fs.exists(pathname,function(exists){
if(exists){
switch(path.extname(pathname)){
case".html":
res.writeHead(200,{"Content-Type":"text/html"});
break;
case".js":
res.writeHead(200,{"Content-Type":"text/javascript"});
break;
case".css":
res.writeHead(200,{"Content-Type":"text/css"});
break;
case".gif":
res.writeHead(200,{"Content-Type":"image/gif"});
break;
case".jpg":
res.writeHead(200,{"Content-Type":"image/jpeg"});
break;
case".png":
res.writeHead(200,{"Content-Type":"image/png"});
break;
default:
res.writeHead(200,{"Content-Type":"application/octet-stream"});
}
//res可以自己添加信息来简单交互比如可以修改点header信息或者修改返回的资源数据
fs.readFile(pathname,function(err,data){
res.end(data);
});
}
else{
res.writeHead(404,{"Content-Type":"text/html"});
res.end("404NotFound
");
}
});
}).listen(8085,"127.0.0.5");//服务器端口
console.log("serverrunningathttp://127.0.0.5:8085/");