Javascript NodeJS中字符串串联的问题:响应中发送的数据为空

Javascript NodeJS中字符串串联的问题:响应中发送的数据为空,javascript,html,css,node.js,reactjs,Javascript,Html,Css,Node.js,Reactjs,此代码用于附加数据并将其发送到客户端。但数据并没有被追加。请帮忙 app.post('/api/display',(req,res)=>{ 让数据=”; 常量bod=所需主体; var input=fs.createReadStream('sample.txt'); var r1=require('readline')。createInterface({ 输入:输入 }); r1.on('line',函数(line){ var ar=行分割(“=”); var valuetypestring=a

此代码用于附加数据并将其发送到客户端。但数据并没有被追加。请帮忙

app.post('/api/display',(req,res)=>{
让数据=”;
常量bod=所需主体;
var input=fs.createReadStream('sample.txt');
var r1=require('readline')。createInterface({
输入:输入
});
r1.on('line',函数(line){
var ar=行分割(“=”);
var valuetypestring=ar[0]。拆分(“”);
var valuetype=valuetypestring[0];
var valuestring=ar[1]。拆分(“”);
var value=valuestring[1];
for(bod中的var attributename){
if(valuetype==attributename){
//console.log正在提供输出
log(`${valuetype}:${value}新值:${bod[attributename]}`);
//数据不会被追加
数据+=`${valuetype}:${value}新值:${bod[attributename]}`;
}
}    
});
res.send(data);//此处字符串为空
});

像许多其他模块一样,Readline是异步的。这意味着它在等待数据时不会阻止代码的执行。因此,您开始监听一条线路,但没有等待数据完成发送,以便调用
res.send(data)
。您要做的是更改行:

res.send(数据);

r1.on(“关闭”,函数(){
res.send(数据);
});

所以你知道数据已经收到了。然后,当您从控制台输入数据时,可以按Ctrl+D键表示所有行都已发送。如果您只希望接收一行,那么您不需要等待
关闭
事件,您只需将
res.send(data)
移动到行处理程序中。

如果您在
res.send(data)
之前放置
控制台.log
,您可能会看到这是在
数据
被附加到,仍然等于
——因为
fs.createReadStream
是异步的:请参阅: