中间件
中间件就是一堆方法,可以接受客户端发来的请求、可以对请求作出响应,也可以将请求交给下一个中间件处理
中间件有两部分构成:中间件方法以及请求处理函数。
如果想用多个中间件处理同一个请求,可以采用next方法
app.use()
不区分请求方式
用处:
1 可以放在最前面,作为网站公告(如:告知用户,网站正在维护)
2 可以放在最后,当做404页面,当所有的路由都没有匹配上时
res.status(状态码),用于更改状态码
错误处理中间件:
常见错误:磁盘读取失败,数据库连接失败等
app.use((err,req,res,next)=>{
res.status(500).send('服务器发生未知错误')
})
async的异步函数,需要使用try...catch
模块化路由
const express = require('express')
const app = express()
const home = require('./home')
const admin = require('./admin')
app.use('/home',home)
app.use('/admin',admin)
app.listen(3000);
/```````````````
const express = require('express')
const home = express.Router()
home.get('/index',(req,res,next)=>{
res.send("home/index")
})
module.exports = home
/
const express = require('express')
const admin = express.Router()
admin.get('/index',(req,res,next)=>{
res.send("admin/index")
})
module.exports = admin
请求参数
j接受get的请求参数:
req.query
接收post请求参数:
用到一个第三方包 : body-parser
const bodyParser = require('body-parser');
app.use( bodyParser.urlencoded({extended:false}) )
然后,就可以用req.body拿到post请求参数了
express路由参数
app.get('/index/:id',(req,res)=>{})
localhost:3000/index/123
静态资源处理
express.static(资源路径)
模板引擎
art-template在express中进一步封装为了:
express-art-template
express-art-template与art-template需要同时下载
使用方法
app.engine('art',require('express-art-template'));
设置模板存放目录
app.set('views',path.join(__dirname,'views'));
渲染模板时不写后缀,默认拼接art后缀
app.set('view engine','art')
这样,就可以使用res.render(index,传递的数据)方法
app.locals对象,
可以用于存放公共数据,所有的模板都可以直接拿到
公共数据,需要在多个模板中使用的,单纯的用render传递数据给一个模板页显然不可靠,
比如,我们有个地方要显示当前用户名,多个模板都是它的子模板,我们登陆成功后单单把数据渲染给某一个模板是不行的,,这时我们需要把这些公共的数据放到req.app.locals里,比如我们要把当前登陆的用户名放到公共区域:
req.app.locals.userInfo = user
//此时我们就给app.locals添加了一个属性userInfo,用来存储相应的公共数据
在模板中使用数据:
直接用{{ userInfo.userName }}就可以拿到当前登陆的用户名
登陆拦截
如果用户没有登陆,直接在路由中输入了相应的地址,是可以访问页面的,这显然不科学
解决方法:
express中间件,拦截请求(中间件要写在路由之前),进行判断.
image.png
格式化验证请求参数
Joi模块
JavaScript对象的规则描述语言和验证器
image.png
网友评论