我在我的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-workedlogger.js:4
next();
^
TypeError: next is not a function
at Object.log (D:express-demo-workedlogger.js:4:5)
at Object.<anonymous> (D:express-demo-workedapp.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中。由于您没有通过任何参数,因此未定义是不确定的,导致了这个例外。
相反,做:
app.use(logger.log);
这将将logger.log传递到app.use。在某个时候,将调用logger.log,传递正确的参数。
在这里:
app.use(logger.log());
您呼叫 log
,没有任何参数,并将其返回值传递到app.use
中。由于log
期望并使用其参数,因此在next()
上会失败,因为next
参数的值为undefined
,因为您没有通过它来传递参数。
您可能只是在以下方式传递该功能:
app.use(logger.log);
// No () ---------^