Express(中间件)
2017-11-24 本文已影响11人
余生筑
- 中间件的作用是实现路径与函数的映射
- 中间件依据next实现跳转
- 当next()有参数时
如果当前中间件类型为express.Router();,则路由中断
如果当前中间件为express(),则转到负责错误处理的中间件 - 当next()无参数时,默认转到按照文档顺序的下一中间件
- 最后一个中间件必须含res.end()
中间件种类
- 普通中间件
函数参数在路由符合当前url时被调用
app.use(‘/xxx’,(res,req,next)=>{
next()
})
- 错误处理中间件
当某个含next(error)中间件执行后,错误处理中间件被触发
app.use(‘/xxx’,(err,res,req,next)=>{
res.end(err)
})
- 路由中间件
路由中间件的目的是为了实现:不同路由下能调用不同的函数
假如我想实现以下功能
localhost:8888/index/ 网站首页
localhost:8888/customer/login 实现用户登录
localhost:8888/customer/out 实现用户退出登录
可以这么写
app.js
const express = require('express')
const http = require('http')
var app = express()
const bodyParser = require('body-parser')
var index=require('./middlewares/index');
var customer=require('./middlewares/customer');
app.use('/',index)
app.use('/customer',customer)
app.use( function (req, res, next) {
res.end();
});
const server = http.createServer(app);
server.listen('8888');
index.js
const express = require('express')
const router = express.Router();
var index = (res, req, next) => {
console.log('首页')
next()
}
router.use('/',index);//这里等效于router.use(index);因为'/'等效于''
module.exports = router;
customer.js
const express = require('express')
const router = express.Router();
var login = (res, req, next) => {
console.log('登录')
next()
}
var out = (res, req, next) => {
console.log('退出登录')
next()
}
router.use('/login',login)
router.use('/out',out)
module.exports = router;