node-red-node-firebird 返回一个缓冲区而不是字符串

问题描述 投票:0回答:1

我正在node-red中执行KPI,并且使用node-red-node-firebird连接我的数据库并从中获取结果。为此,我进行了查询以选择我需要的列,其中之一是:

NAME Varchar(40),示例值:“Pizzas”

(示例:从我的表中选择名称)

当我收到 node-red 上的查询响应时,我将其存储在 msg.payload 中。问题是我得到的结果不是字符串“Pizzas”,而是缓冲区“NAME”:{“type”:“Buffer”,“data”:[80,105,122,122,97,115]}}。

如何获取字符串而不是缓冲区?

我已经尝试了很多事情,其中包括: 在查询中,我尝试了cast(NAME AS varchar(40)) AS NAME; [NAME]没有成功。将 msg.payload.data.toString('utf-8') 放入函数节点但没有任何反应,函数:

var objectData = msg.objectData; //this is the query response
    
//------------Columns----------------------------
var fields = [];
var i = 0;

if(objectData.length > 0) {
   var data = objectData[0];
    for(var key in data) {
        fields[i] = key;
        i++;
    }
    
    //TRY nº1 
    objectData.foreach(function(obj){
        if (Buffer.isBuffer(obj) === true) {
          obj = obj.toString('utf-8');
        }
    })
}

//-----------------------------------------

msg.method = "POST";
msg.url = //My api request//;
msg.headers = {};
msg.headers["Content-Type"] = "application/json";
msg.headers.Authorization = //auth//;

msg.payload = {
    'groupID': 'Group123',
    'companyID': 1221,
    'table': 'DemoTable',
    'fields': fields,
    'data': objectData, //problem 
    'delete': true,
};

//TRY nº2
msg.payload = msg.payload.data.toString('utf-8');
return msg;
buffer firebird node-red
1个回答
0
投票

我解决了我的问题,将选择更改为:

SELECT cast(name as varchar(100) character set win1252) NOME FROM mytable 
© www.soinside.com 2019 - 2024. All rights reserved.