1、浏览器发送请求;
2、express 接受请求;
中间处理的过程
3、路由函数处理渲染;
4、res.render 渲染;
中间件函数可以执行以下任务:
- 执行任何代码;
- 对请求和相应对象进行更改;
- 结束请求、响应循环;
- 调用堆栈中的下一个中间件函数;
应用层中间件
中间件使用 app.use
app.use(function(req,res,next){
console.log("访问任何页面,此函数都会被调用")
next()
})
例如:
const express = require("express");
var app = express();
//匹配路由之前的操作
app.use(function(req,res,next){
console.log("访问任何页面,此函数都会被调用")
next()
});
app.get("/",function(req,res){
res.send("主页");
});
app.listen(8080);
路由中间件
绑定 express.Router()
模块化代码,防止都在同一个页面内臃肿。
var router = express.Router()
例1:商城模块
mall.js:
let express = requier("express")
let router1 = express.Router()
router1.get('/',(req,res){
res.send("商城首页")
})
router1.get('/lsit',(req,res){
res.send("商城产品列表")
})
module.exports = router1
app.js
let router1 = require('./routers/mall')
app.user('/mall',router1)
例2:api 模块
api.js
let express = requier("express")
let api= express.Router()
// api 中间件,允许跨域访问
api.use(rucntion(req,res,next){
res.append('Access-Control-Allow-Origin',"*");
res.append('Access-Control-Allow-Content-Type',"*");
next();
})
api.get('/',(req,res){
res.json({page:1})
})
module.exports = api
app.js
let api= require('./routers/api')
app.user('/api',api)
内置中间件
通过 express.static 我们可以指定要加载的静态资源。
express.static(root, [options]);
第三方中间件
例如 body-parser、cookie-parser,采用引入外部模块的方式来获得更多的应用操作。
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var cookie-parser= require('cookie-parser');
处理错误的中间件
// catch 404 and forward to error handler
// 404 中间件
// 如果请求路径在静态页面、路由中都没有找到,则报 404 错误。
app.use(function(req, res, next) {
//也可以在这里自己进行 404 页面渲染
// res.render('404.ejs')
next(createError(404)); //创建 404 报错,来自于 var createError = require('http-errors');
});
// error handler
// 处理错误中间件
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
网友评论