如何在Node.js中分解传入的http请求以单独处理json对象
我正在处理一个数据处理场景,其中传入数据在Azure IoT Hub中接收,使用Azure流分析进行处理,并发布(http触发器)到Azure函数:写入Node.js。这里的目标是异步中断传入数据和处理对象。 传入数据是一个json对象数组 我曾尝试循环通过req.body将其分解为不同的对象,但没有成功 谢谢你的帮助 函数的传入消息:如何在Node.js中分解传入的http请求以单独处理json对象,node.js,azure-functions,azure-stream-analytics,Node.js,Azure Functions,Azure Stream Analytics,我正在处理一个数据处理场景,其中传入数据在Azure IoT Hub中接收,使用Azure流分析进行处理,并发布(http触发器)到Azure函数:写入Node.js。这里的目标是异步中断传入数据和处理对象。 传入数据是一个json对象数组 我曾尝试循环通过req.body将其分解为不同的对象,但没有成功 谢谢你的帮助 函数的传入消息: [{ "device": { "deviceId": "my-cloud-device" }, "measur
[{
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
},
{
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
}]
处理传入数据的代码
const request = require('request-promise-native');
const handleMessage = require('./lib/engine');
const bodyParser = require('body-parser');
const msiEndpoint = process.env.MSI_ENDPOINT;
const msiSecret = process.env.MSI_SECRET;
const parameters = {
idScope: process.env.ID_SCOPE,
primaryKeyUrl: process.env.IOTC_KEY_URL
};
let kvToken;
module.exports = async function (context, req) {
try {
await handleMessage({ ...parameters, log: context.log, getSecret: getKeyVaultSecret }, req.body.device, req.body.measurements, req.body.timestamp);
} catch (e) {
context.log('[ERROR]', e.message);
context.res = {
status: e.statusCode ? e.statusCode : 500,
body: e.message
};
}
console.log(b);
}
我希望做的是将传入消息分解为不同的对象,这些对象使用上面的代码块进行异步处理
{
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
}
{
"device": {
"deviceId": "my-cloud-device"
},
"measurements": {
"temp": 20.31,
"pressure": 50,
"humidity": 8.5,
"ledColor": "blue"
}
}
我假设
handleMessage
只针对一个对象。在这种情况下,您必须在req.body
上循环才能访问每一个。你能分享一下你尝试过的和以前没用的吗
您的代码应该是这样的
///
module.exports=异步函数(上下文,请求){
让commonArgs={…参数,log:context.log,getSecret:getKeyVaultSecret};
让允诺列表=[];
试一试{
for(让需求主体的开发){
add(handleMessage(commonArgs、dev.device、dev.measures、dev.timestamp));
}
等待承诺。所有(承诺者);//这种方式更好,但你也可以等待每一个电话
}捕获(e){
///
我在您的数据中没有看到时间戳
属性。可能您删除了它
此外,为了获得更好的缩放效果,您可能还需要检查,特别是模式
有了它,您可以将
handleMessage
移动到一个活动函数中,该函数将随负载而扩展。Hey Pramod-感谢您回来!我能够循环接收到的数据并处理遥测。ASA的输出是通过循环完成的,因此必须将其拆分一点以使其工作。持久的函数看起来像promis我一定会查的。谢谢!