结论
级别不一样,用法差不多,一个是应用级中间件,一个是路由级中间件,路由级中间件可以更加细化而不影响全局,一般做 demo 可以直接用 app.get ,一般项目里就用 router.get
分析
一般我们引入是这么引入的吧,说明 router
代表一个由 express.Router()
创建的对象,在路由对象中可定义多个路由规则。
const express = require('express')
const app = express()
const router = express.Router()
app.get和app.use区别
app.get(path,callback)
callback只能传入回调函数,不能传入路由对象。
app.use(path,callback)
callback传入回调函数和路由对象皆可。
express中中间件的类型
应用级中间件
将应用程序级中间件绑定到APP对象通过使用app.use()和app.METHOD()职能,其中METHOD是中间件函数以小写处理请求(如GET、PUT或POST)的HTTP方法。
var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
app.get('/user/:id', function (req, res, next) {
res.send('USER')
})
路由级中间件
路由器级中间件的工作方式与应用程序级中间件相同,使用 router.use()
和 router.METHOD()
下面的示例代码通过使用路由器级中间件复制上述应用程序级中间件的中间件系统:
var router = express.Router()
router.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
router.use('/user/:id', function (req, res, next) {
console.log('Request URL:', req.originalUrl)
next()
}, function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
错误处理中间件
有四个参数而不是三个参数
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
内置中间件
从4.x版本开始,Express不再依赖于 Connect,以前包含在Express中的中间件功能现在位于单独的模块中
Express具有以下内置中间件功能:
express.static 提供静态资产,如HTML文件、图像等。
express.json 使用JSON有效负载解析传入的请求。
express.urlencoded 用URL编码的有效负载解析传入的请求。
第三方中间件
举例:
npm install cookie-parser
var express = require('express')
var app = express()
var cookieParser = require('cookie-parser')
// load the cookie-parsing middleware
app.use(cookieParser())