Javascript 发送到客户端Expressjs路由器后无法设置标头

Javascript 发送到客户端Expressjs路由器后无法设置标头,javascript,express,vue.js,Javascript,Express,Vue.js,我在express js上遇到错误无法设置头,我想问题是必须编写setHeader,我已设置,但仍然无法,这是我的代码: router.get('/cek', (req, res) => { const child = execFile(commandd, ['-c', 'config', 'GSM.Radio.C0']); child.stdout.on('data', function (data) { value = (JSON.stringify(data

我在express js上遇到错误无法设置头,我想问题是必须编写setHeader,我已设置,但仍然无法,这是我的代码:

router.get('/cek', (req, res) => {
const child = execFile(commandd, ['-c', 'config', 'GSM.Radio.C0']);
child.stdout.on('data', 
    function (data) {
        value = (JSON.stringify(data));
        x = value.split('.');
        y = JSON.stringify(x[2])
        result = y.replace(/\D/g, "");
        res.setHeader('Content-Type', 'text/html');
        res.send(result);
    }
);

child.stderr.on('data',
    function (data) {
        console.log('err data: ' + data);
    }
);

});
我花了两天时间来修复这个错误,但仍然无法,任何人都可以帮助吗?

如所述,这通常是在发送res.send并且仍有数据正在处理后造成的。。。您的解决方法可能只是在发送数据之前使用
res.send
接收所有数据。你可以试试这个

异步函数executeCommand(){
返回新承诺((解决、拒绝)=>{
const child=execFile(commandd,['-c','config','GSM.Radio.C0']);
child.stdout.on('data',
功能(数据){
value=(JSON.stringify(数据));
x=值。拆分('.');
y=JSON.stringify(x[2])
结果=y。替换(/\D/g,“”);
决心(结果);
}
);
child.stderr.on('data',
函数(err){//为err重命名了数据以进行澄清
拒绝(错误);
}
);
});
}
router.get('/url',异步(req,res)=>{
试一试{
const result=await executeCommand();
res.setHeader('Content-Type','text/html');
res.send(结果);
}捕获(错误){
//有一个错误,我投了500
res.sendStatus(500);
}
});

请注意,只有当您确信数据被触发一次时,才会有效,如所示,
数据
事件将多次触发,一次从
标准输出的文本产生一块。你似乎把它当作一次就可以通过所有的文本。假设文本相对较少,您可以将
数据
事件中的所有区块串联起来,然后在
关闭
事件中发送。根据具体情况,还可以使用其他方法。此错误通常发生在调用
res.send
方法后尝试执行某项操作时。您可以尝试添加两件事:1)在res.send之前添加一个return,因此
/cek
的请求将被阻塞;2)在stderr上添加一个res.send(err)。在这两种情况下,都有可能引发你的错误谢谢你@FedericoIbba,在下面的回答中,这是有效的。。