gpt4 book ai didi

javascript - 当我尝试将中间件函数导出到 module.exports 对象时,为什么会收到 'Next is not a function'?

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:54 25 4
gpt4 key购买 nike

我在 logger.js 模块中编写了一个中间件函数,然后将其导入 app.js 并使用

// ------ File : logger.js ------ //

function log(req, res, next) {
console.log('Logging details ... ');
next();
}

module.exports = log;

// ------ File : app.js -------- //

const logger = require('./logger');

app.use(logger);

上面的代码可以正常工作,并且我的日志功能可以正常工作。但是,如果我按以下方式导出此日志函数(将其添加到 module.exports 对象),则会收到错误

// ------ File : logger.js -------//

function log(req, res, next) {
console.log('Logging details ... ');
next();
}
module.exports.log = log;

// ------ File : app.js -------- //

const logger = require('./logger');

app.use(logger.log());

Logging details ...
D:\express-demo-worked\logger.js:4
next();
^

TypeError: next is not a function
at Object.log (D:\express-demo-worked\logger.js:4:5)
at Object.<anonymous> (D:\express-demo-worked\app.js:18:16)
at Module._compile (internal/modules/cjs/loader.js:738:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:749:10)
at Module.load (internal/modules/cjs/loader.js:630:32)
at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
at Function.Module._load (internal/modules/cjs/loader.js:562:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:801:12)
at internal/main/run_main_module.js:21:11
[nodemon] app crashed - waiting for file changes before starting...

有人可以向我解释为什么它的行为不同以及如何更正我在此处添加的第二个代码片段吗?

最佳答案

app.use(logger.log());

这将立即调用 logger.log,不传入任何参数。无论 logger.log 返回什么,都将被传递到 app.use 中。由于您没有传入任何参数,因此 next 未定义,从而导致该异常。

相反,请执行以下操作:

app.use(logger.log);

这会将 logger.log 传递到 app.use 中。稍后,logger.log 将被调用,并传入正确的参数。

关于javascript - 当我尝试将中间件函数导出到 module.exports 对象时,为什么会收到 'Next is not a function'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55185879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com