【发布时间】:2021-02-05 00:14:21
【问题描述】:
我有一个 lambda (nodeJs),它读取 S3 存储桶中的文件 (.ref) 并将其内容发布到 AWS IoT-Core 代理内的主题中。 该文件包含类似这样的内容(50 行):
model:type
aa;tp1
bb;tpz
cc;tpf
dd;tp1
代码必须删除第一行并检索剩余的 50 行。这是代码
async function gerRef (BUCKET_NAME) {
const refFile = version + '/file.ref'
const ref = await getObject(FIRMWARE_BUCKET_NAME, refFile)
//Get the file content
const refString = ref.toString('utf8')
//Slip by each line
let arrRef = refString.split('\n')
//Remove the file header
arrRef.shift()
//join the lines
let refString = arrRef.join('\n')
return refString
}
然后我得到这个结果并像这样在 AWS IoT-Core Broker 中发布:
const publishMqtt = (params) =>
new Promise((resolve, reject) =>
iotdata.publish(params, (err, res) => resolve(res)))
...
let refData = await gerRef (bucket1)
let JsonPayload = {
"attr1":"val1",
"machineConfig":`${refData}` //Maybe here is the issue
}
let params = {
topic: 'test/1',
payload: JSON.stringify(JsonPayload) //Maybe here is the issue
qos: '0'
};
await publishMqtt(params)
...
然后它在代理中发布。
问题是发布的内容没有真正的new line。当我在代理中看到时,我得到以下 JSON:
{
"attr1":"val1",
"machineConfig":"aa;tp1\nbb;tpz\ncc;tpf\ndd;tp1"
}
收到此消息的机器正在等待一个真正的新行,如下所示:
{
"attr1":"val1",
"machineConfig":"aa;tp1
bb;tpz
cc;tpf
dd;tp1"
}
如果我只是将整个 JSON 复制并粘贴到 AWS IoT-Core 界面中,它会抱怨 JSON 解析,但会作为字符串发布,并且机器将接受数据 - 因为新行在那里:
简而言之,这里的重点是:
- 我们可以使用 JSON.stringify(JsonPayload) - 代理会接受
- 我不知道如何 stringfy 并保留实际的新行
你猜猜如何做到这一点?
【问题讨论】:
-
这里的目标不明确。你读入文件,把它分开,然后莫名其妙地把它粘在一起,就像原来一样。你只是剥掉标题吗?您可以通过删除第一个
"\n"来做到这一点,而不会造成所有分裂加入混乱。 -
@tadman 你有另一种方法来删除文件的第一行(标题)然后检索所有行吗?如果是,请在此处发布我将使用它 -> stackoverflow.com/questions/65798821/…
-
对于给定的
str、str.replace(/^.*?\n/, '')或str.substr(str.indexOf("\n")+1, str.length)。
标签: javascript newline aws-iot