【问题标题】:Node.js with Express - returning a link to a .CSV file instead of downloading it带有 Express 的 Node.js - 返回指向 .CSV 文件的链接而不是下载它
【发布时间】:2017-12-27 17:46:22
【问题描述】:

我正在创建一个应用程序,它将 json 从数据库转换为 csv 文件,并根据所选参数将其提供给用户。考虑路由器的以下部分,我的节点服务器返回转换后的 CSV 数据:

request(options, function (err, body) {
    if (err) {
        return res.status(400).json({ success: false, data: err});
    }
    else {
        var jsonresponse = JSON.parse(body);
        if (jsonresponse.timed_out) {
            return res.status(504).json({ success: true, data: "timed out"});
        }
        else {
            jsonexport(jsonresponse, function(err, data){
                if(err) return console.log(err);
                return res.status(200).send(data);
            });
        }
    }
}

目前,上述代码采用 json 响应并使用 jsonexport 将其转换为 csv,然后将原始 csv 数据提供给客户端。

我知道我可以在 API 调用完成之前使用 file-system 模块将数据作为文件下载到本地存储,但是有没有办法可以创建 .csv 文件并将其存储在某个地方以供客户端稍后使用使用权?我想在客户端完成 API 调用后完成更多逻辑,然后再让用户拥有文件。

提前感谢您的帮助!

【问题讨论】:

  • 听起来像你想要的multer
  • 如果我没记错的话,这似乎是用户将文件上传到服务器的服务?我如何将它应用到上面的用例中?
  • 我的错,我看错了你的问题。如果您想保存文件并稍后将其提供给客户端,您可以使用fsexpress.static() 函数将其正常保存到磁盘以静态提供文件。阅读更多关于here的信息。
  • 感谢您的帮助。您能否详细说明我将如何使用 express.static() 将响应作为文件提供,我自己找不到提供 csv 文件的示例。
  • 当然。我会提交一个答案。

标签: javascript json node.js csv express


【解决方案1】:

您可以使用express.static() 函数来实现您的目标。 (docs)

考虑以下示例:

var express = require('express')
var app = express();

app.use('/files', express.static('/files');

这将使/files 端点静态地为/files 文件夹中的所有内容提供服务。这意味着如果您在该文件夹中存储了一个名为test.csv 的文件,您可以通过http://yourhost:port/files/test.csv 访问它。

【讨论】:

  • 嘿罗德里戈,谢谢你。我还有一个问题:如何将文件从我的服务器发送到此端点,以便我可以从客户端访问它?为了阐明我的用例,我想创建一个 csv 文件并将其发送到此快速端点,以便稍后从客户端调用它。
猜你喜欢
  • 2017-03-28
  • 1970-01-01
  • 2020-08-14
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多