从外部调用时会跳过nodejs中间件

时间:2014-07-31 10:07:42

标签: node.js express

我对Express和Node相对较新,但这似乎是一个非常基本的需求,我很难理解它是如何发生的。任何帮助解决问题或确定我如何解决它将非常感激。

问题

var 
    express = require('express'),
    bodyParser = require('body-parser'),
    logger = require('morgan'),
    express = require('express'),
    app = express();

app.get('/heartbeat', function(req,res) {
    res.status(200).json(req.header('host'));
});

// my simple middleware component
app.use(function (req, res, next) {
    console.log('made it');
    next();
});
// standard middleware components
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: true })); 

// Start listener
app.listen(4400);

这个简单的程序会输出我的“make it”控制台消息,但是当我在一个名为start的函数中包装所有代码(减去变量定义)时:

var 
    express = require('express'),
    bodyParser = require('body-parser'),
    logger = require('morgan'),
    express = require('express'),
    app = express();

var start = function(config) { ... }
exports.start = start;

然后从一个单独的模块调用start我发现 logging bodyParser 模块似乎已执行但我的中间件组件被忽略。我想把头发拉出来试图找出原因。

1 个答案:

答案 0 :(得分:1)

我发现您的代码存在两个问题:

  1. 您必须在调用app.get(...)之前调用app.use()否则,不会调用任何中间件。

  2. 在您的自定义中间件中,您需要调用next()或next(错误),以便将请求移动到下一个中​​间件。否则,您的服务器将永久挂起。

  3. 如果您在分离模块后发布整个代码,我可以帮助您找到更多问题:)