尽管给出下一个声明,中间件仍无法正常工作

时间:2019-11-18 02:54:23

标签: node.js express

我正在尝试创建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”。

请帮助。

1 个答案:

答案 0 :(得分:1)

更改此:

app.use(middle.winstonLogger());

对此:

app.use(middle.winstonLogger);

第一个函数立即调用该函数,并将其不存在的返回值传递给app.use()。将()放在立即调用它的函数的末尾时。那不是你想要的。该代码不会超出此范围,因为调用它会立即不带参数地调用它,然后您尝试调用next()的{​​{1}},因为throw将是next。 / p>

第二个传递对undefined的函数引用,以便稍后可以调用中间件函数(这是您想要的)。要传递对函数的引用,请传递其末尾不带括号的

您的代码中还有其他相同问题的示例,也需要修复。