Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Node.js中分解传入的http请求以单独处理json对象_Node.js_Azure Functions_Azure Stream Analytics - Fatal编程技术网

如何在Node.js中分解传入的http请求以单独处理json对象

如何在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

我正在处理一个数据处理场景,其中传入数据在Azure IoT Hub中接收,使用Azure流分析进行处理,并发布(http触发器)到Azure函数:写入Node.js。这里的目标是异步中断传入数据和处理对象。 传入数据是一个json对象数组

我曾尝试循环通过req.body将其分解为不同的对象,但没有成功

谢谢你的帮助

函数的传入消息:

     [{
     "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我一定会查的。谢谢!