Javascript 节点-如何在POST路由中间件中访问Req

Javascript 节点-如何在POST路由中间件中访问Req,javascript,node.js,express,Javascript,Node.js,Express,我是Node和Express的新手,我不确定如何在POST路由中访问中间件函数中的req。是否需要将其作为参数传入?此路由中还有其他中间件函数可以访问req,但没有传入。总的来说,我想我对req的工作原理感到困惑 我指的函数是helpers.createPermissions() 我的路线 app.post('/oauth/authorize/decision', login.ensureLoggedIn('connect/signin'), helpers.createPermissions(

我是Node和Express的新手,我不确定如何在POST路由中访问中间件函数中的
req
。是否需要将其作为参数传入?此路由中还有其他中间件函数可以访问
req
,但没有传入。总的来说,我想我对
req
的工作原理感到困惑

我指的函数是helpers.createPermissions()

我的路线

app.post('/oauth/authorize/decision', login.ensureLoggedIn('connect/signin'), helpers.createPermissions(req), oauth2.server.decision());
功能

exports.createPermissions = function(req) {
  console.log(req);
};
错误

ReferenceError: req is not defined

中间件将始终传递三个参数:
req
res
next

因此,您的中间件应该如下所示:

exports.createPermissions = function(req, res, next) {
  console.log(req);
  // TODO: make sure you eventually call either `next` or send back a response...
};
app.post('/oauth/authorize/decision', login.ensureLoggedIn('connect/signin'), helpers.createPermissions, oauth2.server.decision());
您可以这样使用它:

exports.createPermissions = function(req, res, next) {
  console.log(req);
  // TODO: make sure you eventually call either `next` or send back a response...
};
app.post('/oauth/authorize/decision', login.ensureLoggedIn('connect/signin'), helpers.createPermissions, oauth2.server.decision());
在您看到中间件作为一个函数被调用的情况下,这是因为您没有调用中间件本身,而是调用一个返回中间件函数的函数。例如:

var myMiddlewareWrapper = function() {
  // return the actual middleware handler:
  return function(req, res, next) {
    ...
  };
};

app.get('/', myMiddlewareWrapper(), ...);

这通常是为了将额外的选项传递给中间件处理程序(如使用
login.ensureLoggedIn()
)。

+1,值得一提的是,如果您的中间件的算术数为
4
,则假定为
(err,req,res,next)
@maček我出于不使事情复杂化的目的而省略了这个选项,但你绝对正确:)