gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:30:34 28 4
gpt4 key购买 nike

我对 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com