Node.js 如何使用express/connect中的数据对obj请求进行修补

Node.js 如何使用express/connect中的数据对obj请求进行修补,node.js,connect,express,Node.js,Connect,Express,你好 Im编写了一个中间件库来抽象oauth授权/认证过程,并提供自己的认证策略 我被卡住了,因为当我用数据修补请求时,它不会在任何路由请求上可用,但其他中间件(connect/express文档在这方面非常差) 我怎样才能使数据保持不变,使其可用于每个请求(静态文件除外) 谢谢 另外,我不使用其他可用的模块,因为让它们工作起来很令人沮丧…试试这个: function authOrDie() { return function(req,res,next) { console.log(

你好 Im编写了一个中间件库来抽象oauth授权/认证过程,并提供自己的认证策略

我被卡住了,因为当我用数据修补请求时,它不会在任何路由请求上可用,但其他中间件(connect/express文档在这方面非常差)

我怎样才能使数据保持不变,使其可用于每个请求(静态文件除外)

谢谢

另外,我不使用其他可用的模块,因为让它们工作起来很令人沮丧…

试试这个:

function authOrDie() {
  return function(req,res,next) {
    console.log(req.isAuthenticated());
    next(); // Have to call next to continue to the next middleware
  };
}
我假设
console.log(req.isAuthenticated())正在运行并且正在工作,我还假设它正在打印
false

此外,如果对静态文件的请求不需要进行身份验证,则应将其在堆栈中移动得更高。

尝试以下方法:

function authOrDie() {
  return function(req,res,next) {
    console.log(req.isAuthenticated());
    next(); // Have to call next to continue to the next middleware
  };
}
我假设
console.log(req.isAuthenticated())正在运行并且正在工作,我还假设它正在打印
false


此外,如果对静态文件的请求不需要进行身份验证,则应将其在堆栈中移动得更高。

您可以发布应用程序。使用(…)和中间件的相关部分吗?这一行非常不清楚:
“当我用数据修补请求时,它不会出现在任何路由请求上”
,请您详细说明。我曾多次使用connect的中间件,一旦我们确定了您的问题所在,我可以帮助您解决这些问题。@Ryan Olds,我知道,已经解决了。代码在lib中提供。js@RyanStrategyMaster auth method中的Olds是发布应用程序的中间件。是否使用(…)和中间件的相关部分?这一行非常不清楚:
“当我用数据修补请求时,它不会出现在任何路由请求上”
,请您详细说明。我曾多次使用connect的中间件,一旦我们确定了您的问题所在,我可以帮助您解决这些问题。@Ryan Olds,我知道,已经解决了。代码在lib中提供。js@RyanStrategyMaster auth方法中的Olds是一个中间件,但它也是一个中间件。但是,如果我尝试从常规路径(例如/posts)访问附加的用户数据,它将返回未定义的数据。我想我可以在应用程序中间件身份验证逻辑本身中重新附加数据。我只是认为应用程序中的中间件运行在所有的路由和请求中。中间件应该能够添加到
req
,只要没有什么东西把它吹坏,它应该在路由的req中可用,因为它是同一个对象
req
通过引用向下传递中间件,直到其中一个处理它或它到达末尾。express.routes是一个中间件,无论哪个路由处理请求,都将得到相同的
req
对象。如果它没有被设定,那么有什么东西会使它不安。啊,我也这么认为。Route middlware和普通app.configure中间件之间存在细微差别。不同之处在于,由于路由是被访问的,因此它是app.configure中间件链中的第一个,因此(据我所知)没有其他方法可以做到这一点,但要确保也有路由中间件(可以与authOrDie f.e相同的方法)。express.route中间件应该按照使用app.use()添加的顺序运行。添加到路由中的中间件与常规中间件几乎相同,据我所知,它们几乎可以互换。显然,我做错了什么,中间件的执行顺序也出了问题(不知道发生了什么,可能与我没有正确打包模块有关)。谢谢这是可行的,但因为它也是一个中间件。但是,如果我尝试从常规路径(例如/posts)访问附加的用户数据,它将返回未定义的数据。我想我可以在应用程序中间件身份验证逻辑本身中重新附加数据。我只是认为应用程序中的中间件运行在所有的路由和请求中。中间件应该能够添加到
req
,只要没有什么东西把它吹坏,它应该在路由的req中可用,因为它是同一个对象
req
通过引用向下传递中间件,直到其中一个处理它或它到达末尾。express.routes是一个中间件,无论哪个路由处理请求,都将得到相同的
req
对象。如果它没有被设定,那么有什么东西会使它不安。啊,我也这么认为。Route middlware和普通app.configure中间件之间存在细微差别。不同之处在于,由于路由是被访问的,因此它是app.configure中间件链中的第一个,因此(据我所知)没有其他方法可以做到这一点,但要确保也有路由中间件(可以与authOrDie f.e相同的方法)。express.route中间件应该按照使用app.use()添加的顺序运行。添加到路由中的中间件与常规中间件几乎相同,据我所知,它们几乎可以互换。显然,我做错了什么,中间件的执行顺序也出了问题(不知道发生了什么,可能与我没有正确打包模块有关)。谢谢