NodeJS中String的串联问题:响应中发送的数据为空
Posted
技术标签:
【中文标题】NodeJS中String的串联问题:响应中发送的数据为空【英文标题】:Problem with concatenation of String in NodeJS: the data sent in the response is empty 【发布时间】:2020-07-11 22:52:39 【问题描述】:此代码是附加数据并将其发送给客户端。但是数据没有被附加。请帮忙
app.post('/api/display', (req,res) =>
let data = "";
const bod = req.body;
var input = fs.createReadStream('sample.txt');
var r1 = require('readline').createInterface(
input: input
);
r1.on('line', function(line)
var ar = line.split("=");
var valuetypestring = ar[0].split(" ");
var valuetype = valuetypestring[0];
var valuestring = ar[1].split(" ");
var value = valuestring[1];
for(var attributename in bod)
if(valuetype==attributename)
//console.log is giving the output
console.log(`$valuetype:$value new value:$bod[attributename]`);
//The data doesnt get appended
data+=`$valuetype:$value new value:$bod[attributename]`;
);
res.send(data); //Here the string is sent empty
);
【问题讨论】:
如果您在res.send(data)
之前放置一个 console.log
- 您可能会看到它在 data
被附加到之前触发,并且仍然等于 ""
- 因为 fs.createReadStream
是异步的:见:***.com/questions/30386768/…
【参考方案1】:
Readline 与许多其他模块一样,是异步。这意味着它在等待数据时不会阻止代码的执行。因此,您开始侦听线路,但没有等待数据完成发送以便调用res.send(data)
。你要做的是换行:
res.send(data);
到
r1.on("close", function()
res.send(data);
);
因此您知道数据已收到。然后,当您从控制台输入数据时,您可以按Ctrl+D
表示所有行都已发送。如果您只想接收一行,则无需等待close
事件,只需将res.send(data)
移动到行处理程序中即可。
【讨论】:
以上是关于NodeJS中String的串联问题:响应中发送的数据为空的主要内容,如果未能解决你的问题,请参考以下文章
nodejs的http模块不是能够立即接收/发送整个请求/响应吗?