我对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 模块似乎已执行但我的中间件组件被忽略。我想把头发拉出来试图找出原因。
答案 0 :(得分:1)
我发现您的代码存在两个问题:
您必须在调用app.get(...)之前调用app.use()否则,不会调用任何中间件。
在您的自定义中间件中,您需要调用next()或next(错误),以便将请求移动到下一个中间件。否则,您的服务器将永久挂起。
如果您在分离模块后发布整个代码,我可以帮助您找到更多问题:)