【问题标题】:Saving HTTP GET response to a file in a express/node app将 HTTP GET 响应保存到 express/node 应用程序中的文件
【发布时间】:2017-08-30 18:11:05
【问题描述】:

我有一个 express/node 应用程序,它通过类似 /api/user 的 express 路由器公开一个 GET 端点。响应是 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
  });
});
});

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    所以我能够通过以下两种方式之一来做到这一点,

    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
                });
            });
        });
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您想将/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)
      
      })
      

      【讨论】:

      • 感谢您的回复。我只需要在点击 /api/user 端点时下载对文件的响应
      【解决方案3】:

      您需要使用节点文件系统模块将 JSON 响应写入文件。你可以在这里查看一个例子Writing files in Node.js

      【讨论】:

        【解决方案4】:

        如果我猜对了,那么您可以尝试以下 Content-TypeContent-disposition 标头:

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

        注意

        • data in res.end(data) 是你的 json 数据。

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

        【讨论】:

        • 感谢您的回复。有没有办法使用 express.js 在本地做到这一点?
        猜你喜欢
        • 2019-11-26
        • 1970-01-01
        • 1970-01-01
        • 2020-03-02
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        • 2020-06-24
        • 1970-01-01
        相关资源
        最近更新 更多