我正在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;
我解决了我的问题,将选择更改为:
SELECT cast(name as varchar(100) character set win1252) NOME FROM mytable