如何使用网络库从函数外部获取更新值
Posted
技术标签:
【中文标题】如何使用网络库从函数外部获取更新值【英文标题】:How do I get updated value from outside of function using net library 【发布时间】:2020-07-13 07:02:04 【问题描述】:我是 JS 新手。 我正在尝试构建 API 服务器,该服务器必须使用套接字从其他服务器接收数据。 目前我正在使用网络库,我遇到了一个问题。 我应该获取数据以检查硬件是否正常工作,但我只得到 undefiend(空数组)。
我发现一些来源使异步函数被调用,但我仍然无法获得它。
这是我的代码。
router.post("/Updated", async function(req, res, next)
.....
//connect to station server for locking
var data =
cmd: "lockStationQuery",
stationId: STATION_ID,
powerBankId: POWER_BANK_ID,
userId: USER_ID,
number: channelValue
;
var stringData = JSON.stringify(data);
var jsonData = JSON.parse(stringData);
var [client, recvData] = await getConnectionSocket(
USER_ID,
res,
merchant_uid,
amount
);
let successToWriteData = await writeData(client, stringData);
//Fail to send data to lock the Station
if (!successToWriteData)
res.status(500).json(
RESULT: "FAIL",
REASON:
"error code 504"
);
res.end();
return;
console.log("received data", recvData); //this is empty array
jsonData = JSON.parse(recvData[0]);
这是我的 getConnectionSocket 函数。
async function getConnectionSocket(USER_ID, res, merchant_uid, amount)
//서버에 해당 포트로 접속
var client = "";
var recvData = [];
var local_port = "";
let status = ;
client = net.connect( port: 8999, host: "localhost" , function()
console.log(
"connect log======================================================================"
);
console.log("connect success");
console.log("local = " + this.localAddress + ":" + this.localPort);
console.log("remote = " + this.remoteAddress + ":" + this.remotePort);
local_port = this.localPort;
this.setEncoding("utf8");
this.setTimeout(300000); // timeout : 10분
console.log("client setting Encoding:binary, timeout:300000");
console.log("client connect localport : " + local_port);
);
// 접속 종료 시 처리
client.on("close", function()
console.log("client Socket Closed : " + " localport : " + local_port);
);
// 데이터 수신 후 처리
await client.on("data", function(data)
console.log(
"data recv log======================================================================"
);
recvData.push(data);
console.log(recvData); //I want this data
console.log("data.length : " + data.length);
console.log("data recv : " + data);
let jsonData = JSON.parse(data);
if (jsonData.cmd === "removedPowerBank")
if (jsonData.errorCode !== 0)
//환불
console.log("환불 시작");
let cancel = cancelOrder(merchant_uid, USER_ID, res);
//여기서 환불 purchase db에 쓰기
else
console.log("PURCHASE 성공후 디비에 씀");
//구매 purchase db에 쓰기(getRentId에 썼음)
let purchased = writePurchaseDataInDB(
USER_ID,
res,
merchant_uid,
amount
);
console.log(purchased);
client.end();
);
client.on("end", function()
console.log("client Socket End");
);
client.on("error", function(err)
console.log("client Socket Error: " + JSON.stringify(err));
);
client.on("timeout", function()
console.log("client Socket timeout: ");
);
client.on("drain", function()
console.log("client Socket drain: ");
);
client.on("lookup", function()
console.log("client Socket lookup: ");
);
return [client, recvData]; //recvData is always empty array
解决这个问题的最佳方法是什么?
【问题讨论】:
【参考方案1】:需要澄清以下几点
你在下面的日志中得到了正确的值吗?或者你也未定义它们。
console.log("data.length : " + data.length);
console.log("data recv : " + data);
也添加这个
console.log("data type : " + typeof(data));
【讨论】:
以上是关于如何使用网络库从函数外部获取更新值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Struts 嵌套标记库从 HashSet 字段属性中获取项目?
如何使用 requests 库从 http 请求中获取 IP 地址?