`model/model.js`html
// 導入模塊 var ejs=require('ejs'); var fs=require('fs'); var app ={ // login login:function (req, res) { console.log('login'); ejs.renderFile('views/form.ejs',{},function (err,data) { res.end(data); }) }, // dologin dologin:function (req, res) { console.log('333dologin'); var postStr = ''; req.on('data',function (chunk) { postStr+= chunk; }); req.on('end',function (err,chunk) { console.log(postStr); fs.appendFile('login.txt',postStr+'\n',function (err) { if (err){ console.log(err); return false; } console.log('寫入成功') }); res.end("<script>alert('登陸成功');history.back();</script>") }); }, // register register:function (req, res) { console.log('register'); res.end('register') }, home:function (req, res) { console.log('home'); res.end('home') } }; // 暴露 module.exports=app; /* 調用方式 app.login(req,res) app['login'](req,res) */
` 01 services.js`node
//引入http模塊 var http=require('http'); var url =require('url'); // 導入本身封裝的路由 var model = require('./model/model'); //路由:指的就是針對不一樣請求的 URL,處理不一樣的業務邏輯。 http.createServer(function(req,res){ // http://localhost:8001/login res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"}); var pathname = url.parse(req.url).pathname.replace('/','') console.log(pathname); // 調用路由,處理邏輯 if (pathname!=='favicon.ico'){ try{ model[pathname](req,res); }catch (err) { model['home'](req,res) } } }).listen(8001);
構建一個app對象,能夠再綁定屬性和方法express
var app=function(){ console.log('app'); } app.get=function(){ console.log('app.get'); } app.post=function(){ console.log('app.post'); } app.post() /*app.post*/ // app() /*app*/
2 仿照 express,封裝路由app
```模塊化
代碼執行順序: 從上到下函數
```post
var G ={}; var app =function (req, res) { if (G['login']){ G['login'](req,res);/*執行註冊方法*/ } }; // 定義一個get 方法 app.get = function (string, callback) { G[string]=callback // G[string] = 函數 }; // 執行get方法 login 頁面的處理邏輯 app.get('login',function (req, res) { console.log('login'+req) });
// 程序開始執行 setTimeout(function () { app('req','res') },1000);
再次升級 `03 router_express_2.js` ui
var http=require('http'); var url= require('url'); var G ={}; var app =function (req, res) { var pathname = url.parse(req.url).pathname.replace('/',''); console.log(pathname); if (G[pathname]){ G[pathname](req,res); } // if (G['login']){ // G['login'](req,res);/*執行註冊方法*/ // } }; // 定義一個get 方法 app.get = function (string, callback) { G[string]=callback // G[string] = 函數 }; // 只須要請求,就會觸發app這個方法 http.createServer(app).listen(8001); // 註冊login 路由 app.get('login',function (req, res) { console.log('login'); res.end('login'); }); // 註冊 register 路由 app.get('register',function (req, res) { console.log('register'); res.end('register'); });
最後的封裝this
`model/express_router.js`url
var url = require('url'); // 封裝 res 的send 方法 function changeRes(res) { res.send = function (data){ res.writeHead('200',{'Content-Type':'text/html;charset="UTF-8"'}); res.end(data) } } var Server = function () { var G = this; /* 全局變量 */ // 處理get和post請求 this._get={}; this._post={}; var app=function (req, res) { // res 封裝send方法 changeRes(res); var pathname = url.parse(req.url).pathname.replace('/',''); var method = req.method.toLowerCase(); console.log(method,pathname); console.log(G['_'+method]); if (G['_'+method][pathname]){ if (method ==='post'){ /* 處理 post 請求 */ var postStr =''; req.on('data',function (chunk) { postStr+=chunk }); req.on('end',function (err, chunk) { req.body = postStr; G['_'+method][pathname](req,res); /*執行方法*/ // res.end(pathname) }) }else{ /* 處理非 post 請求 */ G['_'+method][pathname](req,res) // res.end(pathname) } }else{ res.end('no router!') } }; // 註冊方式 app.get=function (string, callback) { console.log( G._get[string],string); G._get[string]=callback }; app.post=function (string, callback) { G._post[string]=callback }; return app }; module.exports = Server();
執行程序 `router_express_module.js`
var http = require('http'); var ejs = require('ejs'); var app = require('./model/express_router.js'); console.log(app); http.createServer(app).listen(8001); //登陸頁面 app.get('login',function(req,res){ ejs.renderFile('views/form.ejs',{},function(err,data){ res.send(data); }) }); app.post('dologin',function (req, res) { res.send("<script>alert('successful !');history.back();</script>") }); app.get('news',function (req, res) { res.send("國際大新聞") });