1、Nodejs 静态文件托管
上一讲的静态 web 服务器封装
项目结构:
Web服务器封装成的模块:router.js代码:
var http=require(\'http\'); var fs=require(\'fs\'); var path=require(\'path\'); /*nodejs自带的模块*/ var url=require(\'url\'); //引入events模块解决无法获取异步数据问题 var events=require("events"); var EventEmitter=new events.EventEmitter(); module.exports = { statics: function (req, res,staticpath) { var pathname = url.parse(req.url).pathname;/*获取url传值*/ if (pathname == \'/\') { pathname = \'/index.html\'; /*默认加载的首页*/ } //获取文件的后缀名 var extname = path.extname(pathname); if (pathname != \'/favicon.ico\') { /*过滤请求favicon.ico*/ //文件操作获取 static下面的文件 fs.readFile(staticpath+\'/\' + pathname, function (err, data) { if (err) { /*么有这个文件*/ console.log(\'404\'); fs.readFile(staticpath+\'/404.html\', function (error, data404) { if (error) { console.log(error); } res.writeHead(404, {"Content-Type": "text/html;charset=\'utf-8\'"}); res.write(data404); res.end(); /*结束响应*/ }) } else { /*返回这个文件*/ getMime(extname, EventEmitter) /*获取文件类型*/ EventEmitter.on("msg", function (text) { res.writeHead(200, {"Content-Type": "" + text + ";charset=\'utf-8\'"}); //res.write(data);注意,在接收广播的回调函数里面不能使用write了,否则会报错:write after end res.end(data); /*结束响应*/ }) } }) } } } //获取文件类型的方法, 私有 function getMime(etxName,EventEmitter) { fs.readFile("./mime.json",function (err,data) { if (err){ console.log(\'mime.json文件不存在\'); }else { //console.log(data.toString());//将十六进制转换为字符串 var mimes=JSON.parse(data.toString());//将json字符串转换为json对象 EventEmitter.emit("msg",mimes[etxName]||"text/html")//广播对应的头文件信息,如果没有的话就返回text/html } }) }
创建服务器的00service01.js的代码:
var http=require(\'http\'); var fs=require(\'fs\'); var router=require("./model/router") http.createServer(function (req,res) {//注意req,res不要写反 router.statics(req,res,"static") }).listen(8002)
2、路由
官方解释:
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法的,涉及到应用如何响应客户端对某个网站节点的访问。
非官方解释:
路由指的就是针对不同请求的 URL,处理不同的业务逻辑。
路由代码参考:
var http = require("http") var url = require("url") http.createServer(function (req, res) { var allUrl = req.url; var path = url.parse(allUrl).pathname; if (path == "/login") { res.end("login") } else if (path == "/register") { res.end("register") } else if (path == "/admin") { res.end("admin") } })