使用Express模块​​作为中间件

时间:2016-06-17 21:19:31

标签: javascript node.js express

我是Express的新手,并尝试使用中间件来处理POST请求。如果我暴露端点,并向API发出请求,一切正常。

正确工作

API / index.js

app.post('/api/endpoint', (req, res, next) => {
    next();
});

server.js

app.use(function() {
    console.log('hello'); // => hello
});

但是当我尝试用导出函数的模块替换中间件函数时,函数永远不会被调用。

不工作

API / index.js

app.post('/api/endpoint', (req, res, next) => {
    next();
});

server.js

const makeExternalRequest = require('./server/makeExternalRequest');

...

console.log(makeExternalRequest, typeof makeExternalRequest);
// => [Function] 'function'    

app.use(makeExternalRequest);

服务器/ makeExternalRequest.js

module.exports = function(err, req, res, next) {
    console.log('hello', err);
}

server / makeExternalRequest.js 中的函数永远不会被调用,也没有记录...我是否错误地使用app.use(...)

1 个答案:

答案 0 :(得分:0)

Express中间件需要三个参数,其中第三个参数是您在完成将请求移动到下一个处理程序时调用的函数:

module.exports = function (req, res, next) {
  console.log('hello');
  next();
};

如果不调用第三个参数,您的请求将保持挂起状态,并且永远不会发送响应。此外,请确保在任何将返回响应的处理程序之前调用app.use。如果首先发送响应,则永远不会到达您的中间件。