Node基礎教程(2)

   本文主要實現(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-

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容