Node JS 03 - 留言板案例
关键点 :
- 如何获取到 url 中的参数
- 如何实现页面跳转到原始页面
答案 :
-
通过引入 url 模块, 使用
var parseObj = url.parse(req.url,true)
解析 url 并将参数自动封装为对象, 通过parseObj.query
返回参数对象. -
通过重定向
- 设置请求的状态码为
res.statusCode=302
- 设置 header 为
res.setHeader('Location','/')
- 设置请求的状态码为
-
注意 : 301 和 302 区别
-
301 : 永久重定向 , 即 比如 a.com —> b.com , 下次请求的时候不需要请求 a.com 而是直接到 b,com .
比如 : www.sina.com 301 到 www.sina.com.cn
-
302 : 临时从定向 , 即 比如 a.com —> b.com , 下次请求的时候还是需要请求 a.com 然后到 b,com .
-
var http = require('http')
var fs = require('fs')
var template = require('art-template')
var url = require('url')
var comments = [
{
name:'张三',
message:'我叫张三',
dataTime:'2019-7-16'
},
{
name:'张三',
message:'我叫张三',
dataTime:'2019-7-16'
},
{
name:'张三',
message:'我叫张三',
dataTime:'2019-7-16'
}
]
http
.createServer(function(req,res){
//解析 url 获得解析对象
var parseObj = url.parse(req.url,true)
//获得 url 地址
var pathName = parseObj.pathname
console.log(parseObj)
if(pathName === '/'){
fs.readFile('./views/index.html',function(err,data){
if(err){
console.log('index文件读取失败')
}else{
var htmlStr = template.render(data.toString(),{
comments:comments
})
res.end(htmlStr)
}
})
}else if(pathName.indexOf('/public/') === 0){
console.log('url:'+pathName)
fs.readFile('.'+pathName,function(err,data){
if(err){
return console.log('读取public文件失败')
}else{
res.end(data)
}
})
}else if(pathName === '/post'){
console.log('PostURL:'+pathName)
fs.readFile('./views/post.html',function(err,data){
if(err){
return console.log('读取public文件失败')
}else{
console.log(data)
res.end(data)
}
})
}else if(pathName === '/pinglun'){
//通过解析对象获得参数对象
var comment = parseObj.query;
//设置 comment 的日期
var dataTime = new Date()
comment.dataTime = dataTime
//放入数组中
comments.push(comment)
//进行重定向
res.statusCode=302
res.setHeader('Location','/')
res.end()
}else{
fs.readFile('./views/404.html',function(err,data){
if(err){
return res.out('404 NOT FOUND')
}else{
res.end(data)
}
})
}
})
.listen(3000,function(){
console.log('服务器已启动...')
})