Node.js Express:在每个HTTP请求之前执行钩子函数,包括 app.get() 和 app.post() 吗?

27
我不想在每个 app.get() 的顶部放置验证功能,我该如何在每个请求之前执行代码,而不是在 app.get() 之前?
2个回答

54

在路由之前设置一个中间件:

function myMiddleware (req, res, next) {
   if (req.method === 'GET') { 
     // Do some code
   }

   // keep executing the router middleware
   next()
}

app.use(myMiddleware)

// ... Then you load the routes

哇,太完美了。我查了一下,唯一找到的答案是黑客核心文件或覆盖res.send函数...我从未听说过next(),我得去查一下。 - Farzher
为什么在所有中间件的上方有一个注释说“服务器启动时运行一次”,如果它在每个请求上都运行? - Farzher

7

您还可以进行以下操作:

app.all('*', auth.requireUser);

确实,这不是您使用中间件的标准方式。 - chovy
你能指定 auth.requireUser 的路由吗? - Johhan Santana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接