我正在使用 ExpressJS 开发一个网络应用程序。
页面上有一个创建按钮。我想要实现的是,当单击按钮时,它会向服务器端发送一个 Post/Get 请求,然后服务器端会触发一个进程来生成一个 CSV 文件并将其发送回客户端进行下载。
我正在考虑使用json2csv
.
客户端:
$.ajax({
type: "POST",
url: "/incidents/createTable",
success: function() {
// HOW TO GET THE RETURNED DATA TO A DOWNLOADABLE FILE?
}
});
服务器端和incidents
路由器(下面的代码片段是从 json2csv 官方 npmjs 页面复制的):
const { AsyncParser } = require('json2csv');
// THIS FUNCTION SHOULD GENERATE A CSV FILE IN MEMORY
router.post("/createTable", async function(req, res, next) {
console.log("flag 1"); // For flagging
const fields = ['field1', 'field2', 'field3'];
const opts = { fields };
const transformOpts = { highWaterMark: 8192 };
const asyncParser = new AsyncParser(opts, transformOpts);
console.log("flag 2"); // For flagging
let csv = '';
asyncParser.processor
.on('data', chunk => (csv += chunk.toString()))
.on('end', () => res.send(csv))
.on('error', err => console.error(err));
});
当我运行 Web 应用程序并单击“创建”按钮时,服务器挂在那里,它通过了“标志 2”并且从未通过asyncParser.processor
. 在客户端,POST 请求也被挂在那里并且没有状态码。