要点:
1.express在这个案例之中,将路径的监听方法封装好了,通过平行的代码,简洁,逻辑直观。注意四种主要的方法
.use()监听公开的动态资源,前一个参数监听url,后一个参数指定对应路由的文件夹。
.engine()是在express中使用模板引擎,前一个参数通过某一后缀名,指定可以使用模板引擎的文件类型
.get() .post()分别监听get和post两种方式的url
2.get方式请求,将信息都反应在url中,既不安全也不美观,但是通过查询语句(query)可以容易地获取请求体中地信息。而post请求方式,不会在url中体现出请求体信心,但相应的,较难获取。
在express中,没有封装获取post请求体的API,需要安装中间件—body-parser,在配置好中间件之后,post方式请求res会多出body属性,这个body的内容跟get方式请求的query是一样的。步骤如下:
- 先安装 npm install body-parser --save
- 引包 var postBody = require('body-parser')
- 配置中间体 服务器对象.use(postBody.urlencoded({extended:false}))
服务器对象r.use(postBody.json()
原来的node.js文件改为如下代码
var express = require('express')
var postBody = require('body-parser')
// 引入body-parser插件包
var server = express()
// 创建服务器
server.use(postBody.urlencoded({extended:false}))
server.use(postBody.json())
// 配置body-parser
var events = [
{
name:'RNG',
date:'2018-3',
event:'2018LPL春季赛冠军'
},
{
name:'RNG',
date:'2018-8',
event:'2018LPL夏季赛冠军'
},
{
name:'RNG',
date:'2018-9',
event:'2018LSM季中赛冠军'
},
{
name:'IG',
date:'2018-11',
event:'S8世界总决赛冠军!'
}
]
// 事件通过数组存放
server.use('/public/',express.static('./public/'))
// 开放公开文件夹,可以通过url访问这个文件夹下级文件,前一个参数是监听带有/public/的url
// 后一个是指定url中的/public/对应的文件夹
server.engine('html',require('express-art-template'))
// 引入art-template应该同时安装express-art-template和art-template两个bao
// 虽然后面一个不会被引入,却是前者包的依赖。前一个参数是模板文件的后缀名。
server.get('/',function(req,res){
res.render('index.html',{
events: events
// 模板引擎的使用,替换占位符中的数据
})
})
// 监听url路径
server.get('/yous',function(req,res){
res.render('yous.html')
})
// 监听的是get方式请求的带有/yous的url
server.post('/yous',function(req,res){
var event = req.body
// 通过上面的body-parser插件将复杂的post请求的的请求体,包装成get方式请求的query的格式
event.date = '2018-12-5'
events.push(event)
// res.statusCode = 302
// res.setHeader('Location','/')
// 这次原生的代码方式,下面直接使用express中已经封装的方法
res.redirect('/')
})
// 监听的是post方式请求的带有/yous路径,这是写完记录之后跳转的
// 跟上面监视的是同样的url,但是请求的方式不一样,所以对应不同的结果
server.listen(3000,function(){
console.log('succeed')
})