~~~
//第二個參數tplData的作用是用來傳遞html頁面中要使用的模板數據
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);
})
}
~~~
~~~
if (req.url === '/' || req.url === '/index' && req.method === 'get') {
//1.讀取data.json文件中的數據,并將讀取到的數據轉換為arr 數組
fs.readFile(path.join(__dirname, "data", 'data.json'), 'utf8', function(err, data) {
if (err && err.code !== 'ENOENT') {
throw err;
}
var arr_news = JSON.parse(data || '[]'); //字符串解析為數組
//讀取index.html 并返回
//2.在服務器端使用模板引擎,將arr中的數據和index.html文件中的內容結合,渲染給客戶端
res.render(path.join(__dirname, 'views', 'index.html'),{arr:arr_news});
});
}
~~~
index.html內容修改如下:

- 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模板引擎使用