【问题标题】:Express Middleware快速中间件
【发布时间】:2018-09-17 18:15:18
【问题描述】:

我是 Express 框架的初学者,在代码流方面有些困难。我在 app.js 中有以下代码

app.use('/', index);
app.use('/login', login);
app.use(require('./routes/authenticate_user'))
app.use('/user', userDetails);

问题是,如果用户输入无效路由假设“/错误”,那么我的中间件会发送响应,而不是应用程序抛出 404 Not found。我有什么遗漏吗?(看起来很明显)。感谢您的帮助。

【问题讨论】:

  • 是的,很抱歉一开始没有指定。该中间件用于确保用户是否在请求标头中传递了访问令牌。
  • 好吧,你必须决定在这种情况下你想要发生什么。在我看来,发送一个他们没有得到适当授权的状态(即使它是/wrong)是正确的设计。这也可以防止未经授权的用户了解有关您的 URL 的任何信息,以及哪些有效,哪些无效。
  • 但问题依然存在。有什么方法可以预先检查路线吗?如果允许我的话。或者有其他方法可以解决这个问题。
  • 还有什么问题?我没有建议你改变任何东西。我认为它的方式是正确的设计。如果您只想检查匹配的路由,则必须手动将中间件放在每条路由上。 app.use('/user', require('./routes/authenticate_user'), userDetails);
  • 好的。感谢您的快速回复,我想这是应该的方式

标签: node.js express routes middleware


【解决方案1】:

对于运行身份验证中间件的方式/位置,有多种选择。

1) 您可以在定义任何未经身份验证的路由后立即运行它。这将为您提供任何路由的非身份验证错误,无论它是不是真正的路由,除了允许用户在没有身份验证的情况下进入的少数路由。

2)您可以手动将中间件添加到每个定义的应该具有身份验证的路由,例如:

app.get('/something', yourAuthMiddleware, yourRouteHandler);

这将仅对实际定义的路由运行身份验证检查。这允许您为未定义的路由提供 404 而不是身份验证错误。

第一个选项的优点(本质上就是您现在拥有的方式)是未经身份验证的用户甚至无法找出哪些路由已定义或未定义。如果他们没有通过身份验证,他们根本不会进入,除了允许他们进入的几条路线。在我看来,这是正确的设计。

第二个选项将允许您为未定义的路由提供 404,但它需要手动将身份验证添加到您定义的每个路由或每个需要身份验证的路由器。这允许未经身份验证的用户找出哪些路由已定义,哪些未定义。

【讨论】:

  • 嗨 jfriend 我想使用 express midlle.. 像这样:app.get('/finduser',function(req,res){
  • @ŞükSefHam - 请提出您自己的问题。然后,您可以显示您的代码并解释您的问题/问题。
  • 我不能问问题:)但我想学习:我想使用 express midlle.. 像这样:` app.get('/finduser',function(req,res){user. find{},function(err,result){res.render('./users.ejs',{user:result.....`这是真的吗?
  • @ŞükSefHam - 您可以在加入这里的那一刻提出问题并提供答案。请提出你自己的问题。在这里尝试在其他答案的 cmets 中提出问题是题外话。
  • Stackover 不允许我?:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-19
  • 2018-07-15
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
相关资源
最近更新 更多