【问题标题】:Communicating between modules using HTTP in Nest.js在 Nest.js 中使用 HTTP 在模块之间进行通信
【发布时间】:2020-06-25 07:17:15
【问题描述】:

我在 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。

【问题讨论】:

    标签: javascript node.js module nestjs


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我认为添加 .toPromise() 有效。所以我使用 HTTP 模块的原因是因为我最终想要采用微服务方法,并且很可能无法将服务从 Module2 注入到 Module1 中。如果我不走那条路,那是你建议我做的吗?将 Module2 中的服务注入到 Module1 中?
    • 你切换到微服务时,这是你应该担心的事情,否则,你会为一个简单的调用增加很多开销
    • 有道理。好吧,如果这是一个企业应用程序,并且从长远来看,方向是微服务,那么以这种方式开始不是很有意义吗?如果不是 HTTP,你会推荐什么?在 Module1 中导入 Module2 服务?
    • 我想我的问题是,在考虑和不考虑微服务的情况下,如何最好地实现这个场景?
    猜你喜欢
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多