node.js - Node Express - Http post 返回一个文件

标签 node.js http express download

提交 HTTP 帖子时我无法返回文件

我知道我的所有代码都在运行,直到下载/发送文件部分。

var postData = req.body;
var outputString = "";

mkdirp('./server/tmp');

_.each(postData, function (each) {
    outputString += each.variable + ":  " + each.value + " !default;\n";
});

fs.writeFile(path.resolve("./server/tmp/ionic.app.scss"), outputString);

res.attachment(path.resolve("./server/tmp/ionic.app.scss"));
res.end('hello,world\nkeesun,hi', 'UTF-8');

我怎样才能做到这一点,当用户点击一个按钮时,它会发送一个 POST 请求,而该请求又会下载一个由 Node 服务器动态创建的文件?

最佳答案

res.attachment() 仅设置内容配置 header 。请改用 res.download()

res.download(path.resolve("./server/tmp/ionic.app.scss"));

res.download() 设置内容配置 header 并发送文件。

-- 编辑--

就像我在上一条评论中提到的那样,我没有提到您应该删除代码中的最终 res.end()

不过,我想知道为什么要将生成的文本保存到文件中只是为了发送它。一种简化的方法如下:

var postData = req.body;
var outputString = "";

mkdirp('./server/tmp');

_.each(postData, function (each) {
    outputString += each.variable + ":  " + each.value + " !default;\n";
});


res.attachment("ionic.app.scss");
res.send(outputString);
res.end();

这将实现相同的目标,而无需先将 outputString 保存到文件中。

关于node.js - Node Express - Http post 返回一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837009/

相关文章:

http - HTTP 请求中的 curl -u 等价物

angularjs - Prerender.io 不缓存我的页面

node.js - 如何在 Nodejs 和 Express 中重用数据库连接

node.js - 使用 Node js imap 读取电子邮件正文

node.js - 无法在 router.post 中获取正文,但可以使用 app.post Node js/express

node.js - 构建 Restful API 时选择哪种 HTTP 方法

http - 为什么我在转发 www 时收到 NoSuchBucket 404 错误?

python - AWS Lambda 上的 Flask HTTP 内容长度超过 10485760 字节

javascript - 如何使用 Mongoose 从集合中的所有文档中删除字段?

node.js - 我使用异步 waterfall ,为什么回调不是函数?