NodeJs回调和参数



我遇到了这段需要澄清的代码。http://expressjs.com/en/guide/writing-middleware.html: ~:文本= % 20下% 20% 28% 29% 20函数% 20 % 20不是% 20 % 20的一部分,% E2 % 9 cnext % E2 % 80% 80% 9 d % 20 % 20避免% 20混乱% 2 c % 20总是% 20使用% 20 % 20大会。参考章节:"可配置中间件">

怎么可能"要求","回复";和";next"可以在导出函数中直接引用吗?我的意思是调用者app。use()"也不是CB导出定义模块。= function(options){}"有任何参考

-----块使用导出的中间件----

const mw = require('./my-middleware.js');    
app.use(mw({ option1: '1', option2: '2' }))

}

------导出功能--------

module.exports = function (options) {
// Please explain the below access/visibility of req, res and next parameters.
// I do not see them passed/referred/handed-down from app.use() level.
return function (req, res, next) {
// Implement the middleware function based on the options object
next()
}

每个快速中间件函数都可以访问request,response和一个回调函数,通常命名为next

中间件如何访问这些?当您将一个函数注册为中间件时,express将上述参数作为参数传递给该中间件函数。

因此,当您创建一个函数并打算将其用作中间件时,您已经知道它将从express接收三个参数。因此,您将创建一个具有上述3个参数的函数:

function myMiddleware(req, res, next) {
...
}

有时,我们希望中间件功能是可配置的;因此,我们创建一个接受一些配置选项的函数,然后返回一个将用作中间件函数的函数。

我们知道每个中间件函数将通过express传递3个参数,因此我们定义内部函数接受3个参数:

function returnConfigurableMiddleware(options) {
...
return (req, res, next) => {
...
}
}

在这种情况下,为了注册中间件,我们必须调用返回作为中间件使用的函数的函数。

app.use(returnConfigurableMiddleware(...))

试着这样想:导出函数定义了一个接受(req, res, next)作为参数的函数。

通常在定义函数时,对如何定义参数没有限制。

但是,在这种情况下,参数必须是(req, res, next),因为您正在定义一个快速中间件

调用者[…]也没有CB出口定义[…]]有任何参考资料

这是因为所示代码中没有任何内容调用该函数。导出一个函数,该函数返回一个函数外部函数在这里被调用:

mw({ option1: '1', option2: '2' })

返回一个函数,但不调用该函数。它只是将它作为唯一的参数传递给app.use()

根据用法,假定app是一个Express对象,它的.use()函数是如何为Express web服务器构建中间件。

因此,在Express的内部工作中,作为HTTP请求/响应管道的一部分,it将在稍后的某个时间调用function (req, res, next)。当它这样做时,it将传递(至少)三个参数给该函数。

相关内容

  • 没有找到相关文章

最新更新