gpt4 book ai didi

node.js - 将 JSON 消息发送到 Azure 队列存储

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:46 24 4
gpt4 key购买 nike

我正在使用azure-storage Node 模块。我想在我的队列上发送 JSON 并通过 azure 函数将其放入我的队列中。

我在队列中发送消息。我将消息字符串化以放入队列中。

// This is my service who send message to queue via node lib azure-storage
const queueMsg = {
userId,
token: tokenNotif
};
queueSvc.createMessage(Config.REGISTRATION_FCM_PUSH_NOTIFICATION_QUEUE, JSON.stringify(queueMsg), (err) => {
if (!error) {
this._logger.info(`User ${userId} has register this push notification token`);
resolve(true);

} else {
reject(false);
}
});

在队列函数中我有一个错误,因为该函数认为不是字符串并将消息文本推送到 xx-queue-poison{“userId”:“a6c8a103-dacc-4b15-bffd-60693105f131”,“token”:“xxxx”}

我不知道为什么队列中的引号会被替换为 ASCII 代码?

我还测试了其他东西!从我的服务中,我调用一个 Http Azure 函数,该函数调用队列存储,它的工作方式如下:s ..

HttpTrigger函数调用队列context.bindings.notificationQueue = [{ userId: name, token }];

并对接收到的数据进行排队context.log(`收到 userId ${queueItem.userId}::${queueItem.token}`);

为什么通过使用 HttpTrigger 函数到 QueueTrigger 函数它可以工作,但是当我使用 lib“azure-storage”时却不起作用?

谢谢

最佳答案

I don't know why the quote is replaced by ASCII code on queue ?

基本上,SDK 正在转换字符串消息以使其成为 XML 安全的。如果您查看 SDK 中的代码,默认情况下它使用 TextXmlQueueMessageEncoder 作为消息编码器。 encode 函数将 " 替换为 " 以使其成为 XML 安全的。

来自SDK代码(部分代码片段):

QueueService.prototype.createMessage = function (queue, messageText, optionsOrCallback, callback) {
var userOptions;
azureutil.normalizeArgs(optionsOrCallback, callback, function (o, c) { userOptions = o; callback = c; });

validate.validateArgs('createMessage', function (v) {
v.string(queue, 'queue');
v.queueNameIsValid(queue);
v.callback(callback);
});

var xmlMessageDescriptor = QueueMessageResult.serialize(messageText, this.messageEncoder);
<小时/>
function TextXmlQueueMessageEncoder(){
}
util.inherits(TextXmlQueueMessageEncoder, QueueMessageEncoder);

/**
* Encode utf-8 string by escaping the xml markup characters.
* @this TextXmlQueueMessageEncoder
*
* @param {string} [input] The target to be encoded.
*
* @return {string}
*/
TextXmlQueueMessageEncoder.prototype.encode = function(input){
return input.replace(/&/gm, '&amp;')
.replace(/</gm, '&lt;')
.replace(/>/gm, '&gt;')
.replace(/"/gm, '&quot;')
.replace(/'/gm, '&apos;');
};

一种可能的解决方案是按照您的建议将字符串转换为 Base64 编码的字符串。但是,如果您使用 SDK 检索消息,则您不应在消息正文中看到这些 ",因为 SDK 负责对消息进行解码。

关于node.js - 将 JSON 消息发送到 Azure 队列存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56768711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com