das*_*cht 5 connect node.js express
在研究了一些中间件后,我还有一个问题.
看看下面的工作设置,它只是将do it函数附加到req对象,以便我们可以在任何路径中调用它 req.doit()
但是,req,res,next来自哪里?,我从未通过它们,我更加好奇它是如何工作的,因为匿名函数(2.)被另一个函数(1.)包围,我甚至可以传递参数.
MiddleWareTest.js:
var test = function(options){ //1.)
return function(req, res, next) { //2.)
req.doit = function() {
console.log('doit')
}
next();
}
}
module.exports = test;
Run Code Online (Sandbox Code Playgroud)
app.js:
...
var myMiddleware = require('./MiddlewareTest.js')
app.use(myMiddleware())
...
Run Code Online (Sandbox Code Playgroud)
欢迎任何加深我知识的建议:)
〜马克
记住函数是JS中的对象,因此它们可以像任何其他对象一样传递和返回.
当您告诉express使用您的中间件时,您正在调用该myMiddleWare函数:
app.use(myMiddleWare());
Run Code Online (Sandbox Code Playgroud)
此调用返回您标记为的anon函数\\2..然后Express.js将称其为部分是中间件堆栈处理的请求时,给它req,res和next论据.
您始终可以通过检查arguments对象来查看将哪些参数传递给函数.(即console.log(arguments));