javascript - 将文件写入文件系统,然后在 Express 中下载

标签 javascript node.js express

将文件写入文件系统后是否可以使用 res.download() ?

router.get('/exportjson', (req, res, next) => {
 let json = `{"@dope":[{"set":"","val":"200"}],"comment":"comment","folderType":"window"}`
 const file = `${__dirname}/upload-folder/export.JSON`;
 fs.writeFile('file', json, 'application/json', function(){
    res.download(file);
 })  
})

最佳答案

我不确定我是否完全理解您的问题,但我假设您希望能够将该 json 数据保存到路径 /upload-folder/export.json 中,然后允许浏览器使用 res.download() 在路径 GET/exportjson 处下载文件。

您有几个问题。首先,fs.writeFile 将文件路径作为第一个参数,并且您只需传递字符串file。使用您的代码,数据将作为 file 写入当前目录。您可能想使用 path 模块并创建您要写入的文件的路径,如下所示:

const path = require('path');

const jsonFilePath = path.join(__dirname, '../upload-folder/export.json');

假设代码位于routes/index.js,该路径将指向文件upload-folder/export.json的项目根目录。

您要写入的数据位于变量 json 中,但您将其存储为字符串。我实际上会将它保留为一个对象:

let json = {
  "@dope": [
    { 
      "set":"",
      "val":"200"
    }
  ],
  "comment":"comment",
  "folderType":"window"
};

然后,当您将其作为第二个参数传递给 fs.writeFile 时,对其调用 JSON.stringify 。您还需要传入 utf-8 选项作为第三个参数,而不是 application/json:

fs.writeFile(jsonFilePath, JSON.stringify(json), 'utf-8', function(err) {

在对 fs.writeFile 的回调中,您想要调用 res.download 并将其传递给您刚刚写入文件系统的文件的路径,即存储在 jsonFilePath 中(这部分你是对的,我只是更改了变量名称):

res.download(jsonFilePath);

这是路由器文件的相关部分,其中包含使一切正常工作的代码:

const fs = require('fs');
const path = require('path');

const jsonFilePath = path.join(__dirname, '../upload-folder/export.json');

router.get('/exportjson', (req, res, next) => {

  let json = {
    "@dope": [
      { 
        "set":"",
        "val":"200"
      }
    ],
    "comment":"comment",
    "folderType":"window"
  };

  fs.writeFile(jsonFilePath, JSON.stringify(json), 'utf-8', function(err) {
    if (err) return console.log(err);
    res.download(jsonFilePath);
  });  

});

假设此文件位于 /routes/index.js 中,该文件将保存在 /upload-folder/export.json 中。

这是一个 gif,展示了它在我的机器上的外观:

exportJson

关于javascript - 将文件写入文件系统,然后在 Express 中下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59384663/

相关文章:

javascript - CSS、express 和 bootstrap : overflow and margin error

javascript - 没有 MongoJS 的 Node.js + MongoDB

node.js - NodeJS 无法从 req.params.token 获取 token 值

javascript - express.js 在终端中获取 json 文件

node.js - swagger-ui-express 不在浏览器中呈现,但在 Postman 中具有响应正文

Javascript:在用户停止输入时进行处理

javascript - 构建 API

javascript - 如何用JavaScript设置 "*"的样式和伪状态?

javascript - 将 webpack 与 jQuery 结合使用时出错

javascript - twitter 中 Sequelize 中的多对多 self 引用,如 web-app