我正在尝试将二进制数据发送到azure移动服务API。当我们收到请求并尝试解析数据时,高于7f的字节值(即80,81,90,ff等...)的解释会有所不同。例如,如果我们发送了
Sent data : 67 01 00 00 31 00 31 00 32 00 31 00 00 00 A0 10
Received data: 67 01 00 00 31 00 31 00 32 00 31 00 00 00 ef bf bd 10
这是curl命令:
curl --header "Content-Type:application/octet-stream" -X POST https://x.x.x.x/Api/temp --data-binary @/home/device_data.txt
Nodejs移动服务脚本代码段
exports.post = function(request, response) {
var payload=new Buffer(request.body);
console.log(payload);
}
我怀疑我们的8位二进制流被解释为7位字符流。有人可以对此有所了解吗?
答案 0 :(得分:2)
request.body来自ExpressJS-在这里阅读:http://expressjs.com/4x/api.html#req.body
您将注意到request.body不是请求的主体 - 它是一个已解析的主体。因此,您可能需要明确使用body-parser来处理请求。
请在此处查看同一内容的另一个示例:nodejs/express and binary data in POST
同时查看正文解析器:https://github.com/expressjs/body-parser#bodyparserrawoptions
不幸的是,我不相信您可以在移动服务案例中设置其他中间件。您可以做的一件事是将您的应用程序转移到Azure App Service Mobile Apps - 它采用常规ExpressJS应用程序,但通过SDK处理身份验证,推送通知和数据访问(请参阅https://github.com/Azure/azure-mobile-apps-node和介绍性博客文章: https://azure.microsoft.com/en-us/blog/announcing-node-for-azure-mobile-apps/)