首页 > 解决方案 > 在 Nest.js 中使用 HTTP 在模块之间进行通信

问题描述

我在 Nest.js 中有 2 个模块,我们称它们为 Module1 和 Module2。Module1 的端点为 /api/module1,Module2 的端点为 /api/module2。我正在尝试从 Module1 调用 Module2,如下所示

return await this.httpService
    .post(url, data1, {
        headers: header
    })
    .pipe(
        map(res => {
        return res.data;
        }),
    );

这里的 url 是 /api/module2 而 data1 是我传递的参数。当我打电话时,这就是我所看到的

{"_isScalar":false,"source":{"_isScalar":false},"operator":{}}

当一个承诺在完全完成之前返回时,我通常会看到这个错误。不知道在这里做什么不同。持有这个被调用的 httpService 的方法包含在 async 中,并且调用方法也有一个 await。

标签: javascriptnode.jsmodulenestjs

解决方案


您所看到的是一个未订阅的原始可观察对象,可能是由于返回了一个承诺而不是返回可观察对象。Nest 的 HttpService 默认使用 RxJS 而不是 async/await,但要解决此问题,您可以轻松地.toPromise()在 RxJS 对象之后添加一个,而不必担心自己的订阅。

附带说明:有什么理由通过 HTTP 模块调用 API 而不仅仅是直接使用正确的值调用服务?REST 调用的开销似乎很大。


推荐阅读