【问题标题】:Does the middleware of mongoose also refer to the middleware of express?mongoose的中间件是不是也指express的中间件?
【发布时间】:2018-02-18 07:17:56
【问题描述】:

我也只是想了解中间件的含义。起初我以为是框架 express 中使用的函数。虽然现在我感觉它们只是指代位于异步函数之间的函数。

我知道 next() 习惯于从一个中间件转移到另一个中间件是很常见的。 express 和 mongoose 都有类似名称的 next() 调用。我很担心,因为我在他们的文档中没有看到 mongoose 或 express 相互引用。所以这让我相信他们的中间件的上下文只是为了他们自己。

http://mongoosejs.com/docs/middleware.html
http://expressjs.com/en/resources/middleware.html

将 express 与 mongoose 结合使用时,所有中间件是排列在一起/串联还是分开的?

例如一起/串联
- 在 mongoose 上调用 next() 也会触发 expresses 中间件函数

例如分开
- 猫鼬只有它的中间件 next() 只是移动到前/后挂钩
- express 也只有它的中间件 next() 只是转向它支持的中间件功能

【问题讨论】:

    标签: node.js express mongoose middleware


    【解决方案1】:

    简答:它们是分开的。

    更长的答案:按照惯例,大多数中间件堆栈都会实现某种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 参数命名为单个文件中的其他名称——expressNextmongooseNext,也许——帮助你在脑海中区分它们。

    【讨论】:

    • 抱歉,我无法立即回复,但感谢您的回答。这真的很有帮助。 :)
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2019-01-13
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多