本文主要實現(xiàn)簡單的留言板,包括兩個頁面:一個是添加評論頁面,一個是評論展示頁面。涉及的內(nèi)容如下:
1.url和art-template模版引擎在node中的使用;
2.重定向和靜態(tài)資源文件的處理;
使用url.parse(req.url, true)將url解析為一個方便操作的對象,第二個參數(shù)true表示將字符串轉(zhuǎn)成為一個對象,該對象包括的內(nèi)容如下:
Url {
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: null,
query: {},
pathname: '/public/lib/bootstrap/dist/css/bootstrap.css',
path: '/public/lib/bootstrap/dist/css/bootstrap.css',
href: '/public/lib/bootstrap/dist/css/bootstrap.css' }
重定向的標識為302,使用‘statusCode = 302’實現(xiàn);設置重定向后的目標路徑‘setHeader('Location', '/')’,第二個參數(shù)是跳轉(zhuǎn)到的地址;art-template模版引擎,需要在html文件中留下標識符,如本文中的comments,具體的實現(xiàn)見代碼。
資源文件一般均會放在特定目錄下面,本文放在public文件夾下,一般前端獲取一個圖片/第三方文件等的時候,也會發(fā)一個請求,node直接攔截該請求,返回資源所在的目錄。
代碼如下:
var http = require('http')
var fs = require('fs')
var url = require('url')
var template = require('art-template')
var comments = [
{
name: '張三',
message: '今天天氣不錯!',
dateTime: '2017-10-18'
},
{
name: '王五',
message: '今天伙食不錯!',
dateTime: '2018-10-16'
},
{
name: '趙四',
message: '今天溫度不錯!',
dateTime: '2019-10-14'
},
{
name: '王二',
message: '今天雨水不錯!',
dateTime: '2019-01-02'
},
{
name: '錢三',
message: '今天陽光不錯!',
dateTime: '2018-10-19'
}
]
// 結(jié)論:對于我們來講,其實只需要判定,如果你的請求路徑是 /pinglun 的時候,那我就認為你提交表單的請求過來了
var server = http.createServer();
server.on('request', function (req,res) {
//使用該方法將url解析為一個方便操作的對象,第二個參數(shù)true表示將字符串轉(zhuǎn)成為一個對象
var parsObj = url.parse(req.url, true)
console.log(parsObj)
//請求路徑
var pathname = parsObj.pathname
if (pathname === '/')
{
fs.readFile('./views/index.html', function (err, data) {
if (err){
return res.end('404 Not Found1.')
}
//使用模版引擎,渲染comments內(nèi)容
var htmlStr = template.render(data.toString(), {
comments: comments
})
res.end(htmlStr)
})
}else if (pathname === '/post'){
fs.readFile('./views/post.html', function (err, data) {
if (err){
return res.end('404 Not Found2')
}
res.end(data)
})
} else if (pathname.indexOf('/public/') === 0){
fs.readFile('.' + pathname, function (err, data) {
if (err){
return res.end('404 Not Found3')
}
return res.end(data)
})
}else if (pathname === '/pinglun'){
//請求內(nèi)容,數(shù)據(jù)是以key-value形式過來
var comment = parsObj.query
console.log(parsObj)
comment.dateTime = '2018-11-2'
comments.unshift(comment)
//重定向表示位置
res.statusCode = 302
//重定向的目標路徑
res.setHeader('Location', '/')
res.end()
}else {
return res.end('404 Not Found');
}
});
server.listen(3000,function () {
console.log('listen on 3000')
})

留言板.gif
代碼地址為https://github.com/LiangQiJian/Node-