我正在尝试创建2个中间件。 但是节点并没有超出第一个中间件的范围。我也都给了next()。 请指出我的错误。 这是代码
app.js:
const express = require('express');
const logger = require('./log-winston');
const path = require("path");
const app = express();
const middle = require ('./api/middle/middlewares');
const registerRoutes = require('./api/routes/register')
const morgan = require('morgan');
app.use(morgan(middle.logFunction));
app.use(morgan(middle.logFunction, { stream: middle.accessLogStream }));
//////////////////////////////////////////////////////////////////////////
// These 2 are custom Middlewares, Code is not moving beyond the first one
app.use(middle.winstonLogger());
app.use(middle.showMachineId());
console.log("DEBUG");
app.use('/register', registerRoutes);
module.exports = app;
middlewares.js:
exports.winstonLogger = function (req, res, next) {
console.log("This is winston Logger")
next()
};
exports.showMachineId = function (req, res, next) {
console.log("This is Machine ID")
next()
};
结果是:
[nodemon] starting `node .\server.js`
This is winston Logger
[nodemon] clean exit - waiting for changes before restart
它没有在app.js中打印第二个中间件“ showMachineId”和“ DEBUG”。
请帮助。
答案 0 :(得分:1)
更改此:
app.use(middle.winstonLogger());
对此:
app.use(middle.winstonLogger);
第一个函数立即调用该函数,并将其不存在的返回值传递给app.use()
。将()
放在立即调用它的函数的末尾时。那不是你想要的。该代码不会超出此范围,因为调用它会立即不带参数地调用它,然后您尝试调用next()
的{{1}},因为throw
将是next
。 / p>
第二个传递对undefined
的函数引用,以便稍后可以调用中间件函数(这是您想要的)。要传递对函数的引用,请传递其末尾不带括号的
您的代码中还有其他相同问题的示例,也需要修复。