我有一个快速/节点应用程序,通过快递路由器暴露GET端点,如/ api / user。响应是JSON,当我点击localhost:8080 / api / user时,我想将JSON下载到文件中。
我尝试使用res.download但不确定如何使用它来处理响应数据。这可能是一个重复的问题,但我找不到一个特别针对这个用例的例子。
当在浏览器中调用终点时,它应该提示下载,然后应该下载到默认位置。
router.route('/user')
.get((req, res) => {
MyService.get().then((result) => { // the get method resolves a promise with the data
// Prompt for download
}).catch((err) => {
console.log(err);
res.status(500).json({
status: 500,
data: err
});
});
});
答案 0 :(得分:2)
所以我能够通过以下两种方式之一来做到这一点,
router.route('/user')
.get((req, res) => {
MyService.get().then((result) => {
res.attachment('users.csv');
/*or you can use
res.setHeader('Content-disposition', 'attachment; filename=users.csv');
res.set('Content-Type', 'text/csv');*/
res.status(200).send(result);
}).catch((err) => {
console.log(err);
res.status(500).json({
status: 500,
data: err
});
});
});
答案 1 :(得分:0)
您需要使用节点文件系统模块将JSON响应写入文件。您可以在此处查看示例Writing files in Node.js
答案 2 :(得分:0)
如果我理解正确,您希望将/api/user
的已发送数据保存到您在路线中发送的文件中吗?
var fs = require('fs')
app.get("/api/user", function(req, res){
var data = fromDb()
fs.writeFileSync("/tmp/test", JSON.stringify(data))
res.send(data)
})
答案 3 :(得分:0)
如果我找到了您,那么您可以尝试Content-Type
和Content-disposition
标题,如下所示:
res.writeHead(200, {'Content-Type': 'application/force-download','Content-disposition':attachment; filename={your_file_name}.json});
res.end(data);
注意:
data
中的res.end(data)
是您的json数据。
{your_file_name}.json
是您的实际文件名,请为其命名。