CSV 文件从 Node Express 服务器下载



我有一个包含Node和Express的API后端。我正在尝试从前端获取一些过滤数据并创建一个CSV文件并为用户下载。我一直在使用json2csv。我能够正确创建数据文件,当我在快速路由中使用该文件时,我会下载一个只显示未定义的文件。起初,我认为这是一个异步问题,但是在使用setTimeout作为测试以查看这是否是一个问题之后,我仍然得到未定义的数据文件。控制台记录"csvData"显示正确的数据。

下载文件的快速路由。

app.post('/api/downloads/filtered', (req, res) => {
let fields = [];
fields = Object.keys(req.body[0])
const filteredData = req.body;
const json2csvParser = new json2csv({fields: fields});
const csvData = json2csvParser.parse(filteredData);
console.log(csvData)
fs.writeFile('./report.csv', csvData, (err) => {
if (err) {
console.log(err);
}
else {
console.log('created report.csv');
res.download('./report.csv');
}
})
})

我在前端使用 Vue,单击按钮时会得到文件,不确定这是否是我应该包含的内容。

我最终解决了我的问题。我发现在帖子请求中下载似乎是不可能的。我需要一个获取请求。由于文件的数据来自请求正文,我最终保留了创建文件的 post 请求并创建了一个单独的 get 请求来下载文件,这似乎工作正常,但没有在任何地方找到它记录,所以我不确定是否存在更好的方法。

app.post('/api/downloads/filtered', (req, res) => {
console.log(req.body)
let fields = [];
fields = Object.keys(req.body[0])
const filteredData = req.body;
const json2csvParser = new json2csv({fields: fields});
const csvData = json2csvParser.parse(filteredData);
console.log(csvData)
fs.writeFile('./report.csv', csvData, (err) => {
if (err) {
console.log(err);
}
else {
console.log('created report.csv');
}
})
})
app.get('/api/downloads/filtered', (req, res) => {
setTimeout(() => {res.download('./report.csv')}, 1000)
})

最新更新