如何拦截 node.js 快速请求

Posted

技术标签:

【中文标题】如何拦截 node.js 快速请求【英文标题】:How to intercept node.js express request 【发布时间】:2012-06-17 19:47:21 【问题描述】:

在快递中,我已经定义了一些路线

app.post("/api/v1/client", Client.create);
app.get("/api/v1/client", Client.get);
...

我已经定义了如何在客户端控制器中处理请求。有没有办法在我的控制器中处理请求之前对请求进行一些预处理?我特别想使用访问级别的概念检查 API 调用者是否有权访问路由。任何建议将不胜感激。

【问题讨论】:

把 connect/express 想象成一个多手的按摩师,每只手都是一个中间件,可以将您的请求按摩成正确的响应。所以 Ryan Olds 说的是 100% 正确的。 ;) 【参考方案1】:

您可以通过多种方式做您需要的事情。

这将放置一个中间件,该中间件将在到达路由器之前使用。确保在路由器后面加上app.use()。中间件顺序很重要。

app.use(function(req, res, next) 
  // Put some preprocessing here.
  next();
);
app.use(app.router);

您也可以使用路由中间件。

var someFunction = function(req, res, next) 
  // Put the preprocessing here.
  next();
;
app.post("/api/v1/client", someFunction, Client.create);

这将为该路由执行预处理步骤。

注意:确保您的 app.use() 调用位于您的路由定义之前。定义路由会自动将 app.router 添加到中间件链中,这可能会将其置于用户定义的中间件之前。

【讨论】:

@ryan-olds,如何检查“内容类型”?我必须只在 JSON 上设置过期时间,而不是在所有响应中。 这是简单的拦截概念。您是否熟悉更通用的、形成的方式来执行此操作?谢谢 我想知道是否有办法这样做并检查身体。 ***.com/questions/35164808/… 有,但是正文解析器需要在堆栈/中间件中更早。 为您的第一个解决方案“app.use(app.router);”不再请求(并且将导致不推荐使用的异常)。去掉就完美了

以上是关于如何拦截 node.js 快速请求的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 拦截器没有将 JWT Bearer 放入 node.js 应用程序的每个请求中

如何拦截 Spring Interceptor 到 Node Service 的请求

Rails、redis 和 node.js 如何异步处理请求?

React-umi-request动态刷新Token功能实现及node.js 代码逻辑

快速中间件中的 Node.js JWT 刷新令牌

从 Swift 4 向 Node.js 发送 post 请求