【问题标题】:MQTT sending object instead of string in Nest.js TransportMQTT 在 Nest.js 传输中发送对象而不是字符串
【发布时间】:2021-01-20 22:41:17
【问题描述】:

当我尝试从我的 Nest.js 后端发送字符串时,它会将字符串包装到 JSON 对象中。因此我得到一个对象而不是一个普通的字符串。由于我无法更改接收方的代码,因此我只需要将其作为纯字符串发送。

导入

import { ClientProxy, MessagePattern } from '@nestjs/microservices';

内部构造器

@Inject('MQTT_CLIENT') private _mqtt: ClientProxy,

内部功能

this._mqtt.emit<any,string>('xyz/ABC', packet.toString()).toPromise();

发送的数据包:“sfdksjhfoyoasoiuoudoiuasoidoiaiusoida”

收到的数据包:

{
  "pattern": "xyz/ABC",
  "data": "sfdksjhfoyoasoiuoudoiuasoidoiaiusoida"
}

接收方需要的数据包:“sfdksjhfoyoasoiuoudoiuasoidoiaiusoida”

【问题讨论】:

  • 如果无法使用默认的传输库,我愿意使用其他相当成熟的库。

标签: asynchronous mqtt nestjs


【解决方案1】:

这是不可能的,MQTT会同时发送模式和数据,你可以使用Dot Notation提取你需要的属性。

【讨论】:

  • 所以你的意思是我需要在接收端编辑代码(用 python 编写),因为我提到过更改该代码对我来说是不可能的。有没有其他图书馆可以帮助我们做到这一点?
  • 另外,当我尝试在 Nestjs 订阅该数据包时,它会自动解包并仅以字符串的形式返回给我们。
  • 好吧,Nest.js 接收器也获取整个对象并只给你数据属性,如果它必须是 MQTT,你所做的是最好的方法,我不知道任何其他库.但是你不能改变接收端的事实有点奇怪。
  • 是的,我同意,底层的嵌套库将 JSON 对象转换回字符串。当我说我无法更改接收器代码时,我的意思是它是我最不喜欢的选项,因为它处于物联网设备的固件级别。如果有确认您的事实的文档,请您指导我查看文档,以便我们选择接收器代码更改选项(如果这是最后的选项)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2020-05-12
相关资源
最近更新 更多