~~~
//該模塊負責對 req 和 res 進行擴展
//做什么?
//1.為req增加一個 query 屬性,該屬性中保存的就是用戶 get 請求提交過來的數據
//-req.query
//2.為req增加一個 pathname 屬性
//- req.pathname
//3.為res增加一個 render 函數
var url = require('url');
var fs=require('fs');
var mime=require('mime');
var _=require('underscore');
//讓當前模塊對外暴露一個函數,通過這個函數將index.js中的 req 和res 傳遞到當前context.js這個模塊中
module.exports = function(req, res) {
var urlObj = url.parse(req.url.toLowerCase(), true);
//1.為req增加query屬性
req.query = urlObj.query;
//2.為req增加pathname屬性
req.pathname = urlObj.pathname;
//將用戶請求的方法轉為小寫字母
req.method = req.method.toLowerCase();
//3.為res增加一個render函數
res.render = function(filename, tplData) {
fs.readFile(filename, function(err, data) {
if (err) {
res.writeHead(404, 'Not Found', { 'Content-Type': 'text/html;charset=utf-8' });
res.end("404,page not found.");
return;
}
if (tplData) {
//如果用戶傳遞了模版數據,表示要進行模板替換
var fn = _.template(data.toString('utf8'));
data = fn(tplData);
}
res.setHeader("Content-Type", mime.getType(filename));
res.end(data);
})
}
}
//步驟:
//1.思考:該模塊中要封裝什么代碼?
//2.思考:這些代碼有用到外部的數據嗎?如果用到了,是否需要通過參數將這些數據傳遞到當前模塊中
//3.當前模塊對外需要暴露的東西(module.exports的值)
~~~
//index.js
~~~
var context = require('./context.js');
context(req, res);
~~~
- node.js
- 第一章 node.js介紹
- 第二章 node.js安裝和配置
- 第三章 node.js開發網站和傳統php等開發網站的區別
- 第四章 REPL介紹
- 第五章 創建javascript文件編寫程序
- 第六章 寫入文件操作
- 第七章 異步操作
- 1.try-catch
- 第八章 讀取文件
- 第九章 __dirname和__filename獲取正在執行的js文件的路徑
- 第十章 通過path模塊進行路徑拼接
- 10.1 作業:創建文件夾
- 第十一章 編寫http服務程序
- 1.通過服務器端設置響應報文頭解決亂碼問題
- 2.通過設置http響應報文頭來解決瀏覽器顯示html問題
- 3.根據不同請求做出不同響應
- 4.根據用戶不同請求-讀取不同的html文件響應
- 5.根據用戶不同請求,返回不同html文件(帶圖片)
- 6.根據用戶不同請求,返回不同html文件(帶css)
- 7.模擬apache
- 第十二章 請求url就是一個標示符
- 第十三章 request和response對象介紹
- 13-1 request對象
- 13-2 response對象
- 第十四章 npm介紹
- node.js進階
- 1.Modules和Packages區別
- 2.package.json文件介紹
- 3.package-lock.json文件介紹
- 4.HackerNews項目
- 4.1 搭建代碼結構
- 4.2 根據不同路由響應不同的html頁面
- 4.3 封裝render函數
- 4.4 render函數掛載到res上
- 4.5 獲取用戶get提交的數據
- 4.6 將用戶提交的數據寫入到data.json文件中
- 4.7 瀏覽器重跳轉
- 4.8 get方式提交數據被覆蓋
- 4.9 post方式請求提交
- 4.10 underscore
- 4.11 顯示從submit添加進來的數據
- 4.12 添加新聞時增加一個id屬性
- 4.13 顯示新聞詳情
- 4.14 封裝讀取data.json文件的方法
- 4.15 封裝寫入data.json文件的方法
- 4.16 封裝獲取用戶post提交的數據的方法
- 4.17 總結:使用封裝的函數改造原來的代碼
- 0.項目地址
- 5. require加載機制
- 5-1 node.js中模塊的分類
- 5-2 require函數加載模塊原理
- 6. CommonJS規范
- 7.module.exports
- 8. exports和module.exports的區別
- 9. HackerNews項目優化
- 9-1 模塊化思路
- 9-2 封裝context.js模塊
- 9-3 提取router.js模塊
- 9-4 提取handler.js模塊(handler.index方法封裝)
- 9-4 提取router.js模塊02(順帶封裝handler.js模塊中的方法)
- 9-5 模塊化后代碼執行順序
- 9-6 封裝config.js模塊
- node.js2
- 1. buffer類型介紹
- 2. express框架
- 2.1 expres實現hello world
- 2.2 res.send()和res.end()的區別
- 2.3 app.get和app.use注冊路由的區別
- 2.4 app.all()注冊路由
- 2.5 通過正則表達式注冊路由
- 2.6 通過req.params獲取路由中的參數
- 2.7 通過express模擬Apache實現靜態資源托管服務
- 2.8 res對象的常見方法
- 3.基于express的hackernews項目
- 3.1 封裝路由模塊
- 3.2 封裝handler.js模塊
- 3.3 res.sendFile和res.render
- 3.4 ejs模板引擎使用