1、Nodejs 靜态檔案托管
上一講的靜态 web 伺服器封裝
項目結構:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuAjNzIDNxMDO30CO4kDOygzM1ETNyQDM5EDMy0CN0kjM0ITMvwFNwkTMwIzLcRDN5IDNyEzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
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")
}
})
轉載于:https://www.cnblogs.com/luzhanshi/p/10768920.html