Node.js express.js中中间件功能的范围
我正在学习express.js/node.js,对javascript原型模型有很好但不是很好的理解。因此,我对express.js的路由机制中中间件的堆叠方式有点困惑 说我们有这个 由于andrestricto(role)返回一个中间件,它在路由链中执行——我明白了。然而:Node.js express.js中中间件功能的范围,node.js,scope,express,connect,middleware,Node.js,Scope,Express,Connect,Middleware,我正在学习express.js/node.js,对javascript原型模型有很好但不是很好的理解。因此,我对express.js的路由机制中中间件的堆叠方式有点困惑 说我们有这个 由于andrestricto(role)返回一个中间件,它在路由链中执行——我明白了。然而: req、res、next参数在返回的函数中来自何处?我猜“链”某种程度上是在排队并分配参数,但这对于更深入的理解来说有点太模糊了 作为next参数引发的错误发生了什么?错误是否会破坏中间件链 如果我想将限制机制打包到一个单
req
和res
调用它们中的每一个,并添加一个next
,调用路由代码的一部分,该部分将控制传递给链中的下一个中间件函数
2) 未引发任何错误(只有throw
语句才能实际引发错误)。路由代码识别出中间件函数返回了一个错误
对象,并对此进行了适当的处理
3) 您只需将其放入导出andRestrict
的模块中(如果它是模块中唯一外部可用的函数,那么您可以设置exports=andRestrict
,然后使用require('mymodule')
调用它);否则,您将设置exports.andRestrict=
并分两步调用它:mymodule=require('mymodule')
,以及mymodule.andRestrict
稍后(例如,当将其作为中间件传递时))。req
和res
来自Express JS的源代码,例如Node.JShttp.createServer
handler(在实际点击Express的处理程序之前,这两个变量都被修改了一点)。此时,Express保存所有路由的数组,并将req
、res
和next
功能应用于每条路由next
函数知道我们目前在哪个中间件上(由于一些作用域技巧),并这样调用它:next()
带您到下一个处理程序
2) 当引发错误时(实际上不是引发,而是传递给),next
函数会将您带到错误处理程序,您可以使用app
的error
方法定义该错误处理程序,例如(取自):
引发error
会断开一个中间件链,并将您带到错误处理程序链(如您所见,您也可以在错误处理程序中使用next
)
3) 一点也不难:
security.js
module.exports = function(req, res, next) {
console.log('Security middleware!');
next();
}
app.get('/', require('./security'), ...);
app.js
module.exports = function(req, res, next) {
console.log('Security middleware!');
next();
}
app.get('/', require('./security'), ...);