我只是想了解中间件所指的内容。起初我以为它是框架表达中使用的函数。虽然现在我感觉他们只是简单地引用了异步函数之间的函数。
我知道看到next()习惯于从一个中间件转移到另一个中间件是很常见的。 express和mongoose都有类似名字的next()调用。我很担心,因为我没有看到他们的文件中有猫鼬或快递互相引用。所以这让我相信他们的中间件的上下文只是为了他们自己。
http://mongoosejs.com/docs/middleware.html
http://expressjs.com/en/resources/middleware.html
当表达与mongoose表达时,所有中间件排列在一起/连接在一起还是分开?
e.g。在一起/级联
- 在mongoose上调用next()也会触发表达中间件函数
e.g。独立
- mongoose只有它的中间件next()只是移动前/后挂钩
- 表达也只是它的中间件next()只是转向它支持的中间件功能
答案 0 :(得分:0)
简短回答:他们是分开的。
更长的回答:按照惯例,大多数中间件堆栈会实现某种next
函数来调用,以便继续向下调用每个中间件函数。
这是一个范围问题。 Express和Mongoose都有自己独立的中间件堆栈,因此next
函数的作用取决于它被调用的位置。作为一般经验法则,每个函数 - 包括用于接受next
参数的回调的匿名函数 - 都有自己的范围。
考虑以下非常简短的不同范围的示例,但其他相同的参数名称:
function doSomething(arg) {
console.log(arg)
function doSomethingElse(arg) {
console.log(arg);
}
doSomethingElse('different');
}
doSomething('original');
// Outputs
// > 'original'
// > 'different
即使doSomething
和doSomethingElse
都有一个名为arg
的参数,doSomethingElse
记录到控制台的值也是实际传递给该函数的值 - arg
的值作为调用它的函数的范围,而不是它周围的范围。
适用于Express中间件中应用的Mongoose中间件(反之亦然):它们碰巧共享一个类似的传统参数名称。
作为一个学习实验,你应该暂时偏离惯例(但不是永远;出于某种原因存在约定!)来将你的Express和你的Mongoose next
参数命名为单个文件中的其他内容 - { {1}}和expressNext
,也许是 - 帮助在你的脑海中区分它们。