猫鼬的中间件是否也指快递的中间件?

时间:2017-09-09 15:19:51

标签: node.js express mongoose middleware

我只是想了解中间件所指的内容。起初我以为它是框架表达中使用的函数。虽然现在我感觉他们只是简单地引用了异步函数之间的函数。

我知道看到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()只是转向它支持的中间件功能

1 个答案:

答案 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

即使doSomethingdoSomethingElse都有一个名为arg的参数,doSomethingElse记录到控制台的值也是实际传递给该函数的值 - arg的值作为调用它的函数的范围,而不是它周围的范围。

适用于Express中间件中应用的Mongoose中间件(反之亦然):它们碰巧共享一个类似的传统参数名称。

作为一个学习实验,你应该暂时偏离惯例(但不是永远;出于某种原因存在约定!)来将你的Express和你的Mongoose next参数命名为单个文件中的其他内容 - { {1}}和expressNext,也许是 - 帮助在你的脑海中区分它们。