将HTTP GET响应保存到快速/节点应用程序中的文件

时间:2017-08-30 18:11:06

标签: node.js express

我有一个快速/节点应用程序,通过快递路由器暴露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
  });
});
});

4 个答案:

答案 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-TypeContent-disposition标题,如下所示:

res.writeHead(200, {'Content-Type': 'application/force-download','Content-disposition':attachment; filename={your_file_name}.json});
res.end(data);

注意

    {li>

    data中的res.end(data)是您的json数据。

  • {your_file_name}.json是您的实际文件名,请为其命名。