javascript - 将标头发送到客户端 Expressjs 路由器后无法设置标头
问题描述
我收到错误无法在 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);
}
);
});
我厌倦了两天修复这个错误,但仍然不能,有人可以帮忙吗?
解决方案
正如Frederico Ibba 所说,这通常是在发送 res.send 并且仍在处理数据之后引起的......您的解决方法可能只是在使用 .send 发送之前接收所有数据res.send
。你可以试试这个。
async function executeCommand() {
return new Promise((resolve, reject) => {
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, "");
resolve(result);
}
);
child.stderr.on('data',
function (err) { // Renamed data for err for clarification
reject(err);
}
);
});
}
router.get('/url', async (req, res) => {
try {
const result = await executeCommand();
res.setHeader('Content-Type', 'text/html');
res.send(result);
} catch(error) {
// There was an error. I'm throwing a 500
res.sendStatus(500);
}
});
请注意,只有当您确信数据被触发一次时,这才会有效,如裙子所示
推荐阅读
- spring-boot - 托管在 Azure 上的 Spring Boot 网站上的 Websockets 返回错误 503/403
- azure - 无法将委派添加到现有子网:添加此 VNET 将超过应用服务计划 VNET 限制 1
- regex - 从非结构化文本中提取Key-Value的方法有哪些?
- python - 使用一台机器在另一台机器上运行脚本
- php - 防止刷新重新加载数据而不重定向到新页面
- c# - 在winforms下开发了一个小app,可以在linux下开发吗?
- webpack - 用于多个动态添加的项目的单个 Webpack 开发服务器实例
- javascript - 如何使用 'this.pros.function' 调用在组件上下文中运行的函数?
- java - 如何从 Intent.ACTION_GET_CONTENT 获取完整路径?
- python - 对于带有索引的语句和范围函数