node.js - 将数据导出到 csv 时出现“发送到客户端后无法设置标题”
问题描述
我正在尝试将数据转换为 csv 并将其发送给客户端进行下载,但我收到了标题中指出的错误。
我正在使用节点 js 流,因为我正在处理大数据。
上面,你会找到我的代码。
router.get('/backoffice/moderateur/organismes/export/:status', checkAuth, checkProfile('moderateur'), tryAndCatch(async (req, res) => {
let codeRegion = req.user.codeRegion;
let { status } = await Joi.validate(req.params, {
status: Joi.string().allow(['all', 'active', 'inactive']).default('all'),
}, { abortEarly: false });
let stream = await db.collection('accounts').find({
profile: 'organisme',
codeRegion: codeRegion,
...(status === 'all' ? {} : { passwordHash: { $exists: status === 'active' } }),
}).stream();
// const organismes = await db.collection('accounts').find({
// profile: 'organisme',
// codeRegion: codeRegion,
// ...(status === 'all' ? {} : { passwordHash: { $exists: status === 'active' } }),
// }).toArray();
res.setHeader('Content-disposition', 'attachment; filename=avis.csv');
res.setHeader('Content-Type', 'text/csv; charset=iso-8859-1');
let lines = 'SIRET;EMAIL;NOM\n'
res.write(lines);
// organismes.forEach(organisme => {
// lines += organisme.SIRET + ';' +
// organisme.courriel + ';' +
// comment.courriel + '\n';
// });
let handleError = e => {
logger.error('An error occurred', e);
res.status(500);
stream.push(Boom.boomify(e).output.payload);
};
stream
.on('error', handleError)
.pipe(transformObject(async organisme => {
return organisme.SIRET + ';' +
organisme.raisonSociale + ';' +
organisme.courriel + '\n';
}))
.pipe(encodeStream('UTF-16BE'))
.pipe(res);
// res.send(organismes);
}));
解决方案
您尚未指定在哪一行收到此错误。
但是,通过查看代码,我最好的猜测是您正在触发handleError
尝试执行res.status(500)
此操作的操作将触发异常,因为您已经在此处隐式发送了标头res.write(lines)
。
推荐阅读
- ssh - 无法 ssh 到谷歌云实例
- meteor - 为什么 findOne() 在 withTracker() 部分不起作用,但在 render() 方法中起作用?
- mongodb - MongoDB条件投影
- firebase - Expo,React Native Firebase:GoogleSignIn.initAsync():未定义不是对象
- c - printf 或 scanf 问题(无法正确打印数字)
- http - 颤振:不记名令牌未发送到 API
- assembly - 我正在尝试将 C 代码转换为 MIPS 程序
- android - Google Pay 在 Xamarin Forms 上返回奇怪的错误
- javascript - Javascript 移除事件监听器
- javascript - 如何在 React Native 中从服务器获取数据之前渲染加载器