node.js - 在 Controller 中使用 api 请求 header 的有效方法,Node Express Js 中的模型

标签 node.js rest express sequelize.js

我对 Node JS 非常陌生。我们确实需要使用从路由器到模型类的请求 header 。
让我们假设一个简单的路由器

router.ts
router.delete(
  '/sample/:id',
  validateRequest(),
  async function (req: Request, res: Response, next: NextFunction) {
    try {
      const solution: string = req.header('Some Header Value') || '';
      await Controller.someMethods(req.params.id, solution);
      return res.json(new HttpResponse('SUCCESS', {}, {}));
    } catch (err) {
      return next(err);
    }
  },
);
这是我们的路由器,在这里我们应该能够读取 Controller 、服务和模型类中的“解决方案”。现在我们已经将它作为参数传递给不同的组件。有没有更好的方法来读取当前请求范围内的 header 值?
类似地,在 spring 框架中使用组件,或 sesison 管理或任何其他更好的方法,而不是在每个组件级别将 header 值作为参数传递。
问候
埃雷什

最佳答案

TL;博士;除了手动映射之外别无他法。
Express 非常简约,所以我们没有像 Spring 这样的抽象,事实上 Node.js 与 Java 不同。在 Java 中,我们为每个请求生成一个线程,因此每个请求都有一个线程。而 Node.js 是异步和单线程的,因此多个请求共享同一个线程,因此您需要将值传递给您的调用,因为在存储请求的全局值方面没有开箱即用的解决方案。
如果您想访问应用程序内某处的 header ,您可以构建一个这样做的系统。第一步是添加中间件,该中间件使用与其关联的唯一 ID 存储服务中的 header ,并以某种方式将此 ID 传递下去。然后,只要您知道 ID,就可以调用服务为您获取数据,尽管您仍然需要在路上传递 ID。我认为你不应该关心这个,这没关系。我会以 Controller 的方式重构您的代码方法访问reqres那么使用这些对象的所有逻辑都将在这里封装,而服务层将期望原始数据,这些原始数据对 Controller 操作的传输层一无所知。因此,您可以从另一个服务调用服务,因为它们对请求和响应一无所知。
FWIW,如果您需要更好的框架,请使用 Nest.js,它很棒且先进,它还使用装饰器(类似于 Spring 中的注释)。例如,您可以通过以下方式将 header 值作为调用参数注入(inject)您的方法 @Header("some-header") solution: string最好的祝福。

关于node.js - 在 Controller 中使用 api 请求 header 的有效方法,Node Express Js 中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67419102/

相关文章:

rest - 如何使用像 '/update/:id' 这样的 URL 作为 KendoUI 数据源?

mysql - 事务提交后验证错误

javascript - Express next(err) 是否必须有特定的格式?

javascript - 使用 multer 接收 FormData 对象作为 node.js 服务器

node.js - node.js 的断言库?

javascript - 从 Node 上传时文件损坏

java - 如何将 JMeter 中测试套件的所有响应保存在一个文件中?

java - 使用 Jackson 无法识别 @JsonCreator

javascript - 单元测试中的代码覆盖率

javascript - 诗乃js AssertError : expected stub to be called once but was called 0 times