Node.js 将文本作为下载文件发送

Node.js 将文本作为下载文件发送,node.js,express,Node.js,Express,试图以文件的形式发送简单的文本字符串,根据请求以特定的名称下载。似乎无法理解此代码失败的原因 var text_ready = "This is a content of a txt file." res.setHeader('Content-type', "application/octet-stream"); res.setHeader('Content-disposition', 'attachment; filename=file.txt'); res.send( new Buffer(

试图以文件的形式发送简单的文本字符串,根据请求以特定的名称下载。似乎无法理解此代码失败的原因

var text_ready = "This is a content of a txt file."
res.setHeader('Content-type', "application/octet-stream");
res.setHeader('Content-disposition', 'attachment; filename=file.txt');
res.send( new Buffer(text_ready) );
当执行此代码时,我只收到一个XHR响应(将该字符串作为内容),但没有启动下载。但我预计收到此响应将迫使浏览器下载一个名为
file.txt
的文件,该文件包含上述字符串的内容

如何解决这个问题?我做错了什么

也许这很重要:在Windows上的Chrome41下工作

编辑:似乎我需要更深入地描述一下。工作流程如下所示:

  • 页面包含一个表格单元格,每个单元格都附加了角度
    ng click
    事件
  • 单击GET时,使用jQuery的$.GET(“/download”)将请求发送到“/download”
  • 服务器具有处理此GET请求的路由
  • 我需要实现的是,将某个文本字符串发送给用户并保存为文件(这样,在单击后即开始下载)
测试
  • 当我通过在地址栏中输入此url并按enter键手动导航到该url时,会起作用
  • 当我用鼠标在该单元格上单击时,不起作用——发送请求,接收响应,但不启动下载

  • 在my node.js版本0.12.2、Windows 7、Chrome和Firefox上测试

    var http = require('http');
    
    http.createServer(function (req, res) {
    var text_ready = "This is a content of a txt file."
    
    
    res.writeHead(200, {'Content-Type': 'application/force-download','Content-disposition':'attachment; filename=file.txt'});
    
    res.end( text_ready );
    }).listen(8080, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:8080/');
    
    我认为您没有运行最新版本的node.js。也许您只能更改内容类型标题,这可能会起作用。此外,您还可以使用
    res.end(新缓冲区(text_ready))。我已经测试过了

    编辑: 如何使用javascript(jQuery onclick)调用从node.js下载文件:

    Javascript:

    <script type="text/javascript">
    $(document).ready(function(){
        $("#button").on('click',function(){
            window.location = 'http://127.0.0.1:1337/';
        });
    });
    </script>
    
    
    $(文档).ready(函数(){
    $(“#按钮”)。在('单击',函数()上{
    window.location=http://127.0.0.1:1337/';
    });
    });
    
    HTML:

    下载

    我相信您知道如何将jQuery重写为angularJS:)
    我认为这比使用Ajax调用要好。如果您真的需要Ajax,我将了解如何使用。

    我有node 0.11.30和express 4.3.2。还是不行。这可能是因为这是一个使用jQuery的POST请求(不是GET请求)?您不能使用ajax调用下载文件。可以使用iframe吗?有些人会想
    或者尝试这样做:我编辑了最初的问题,以便更好地描述我正在尝试做的事情。正如我所理解的,这个问题是由ajax造成的。使用
    window.location=“/download/”
    ,它可以正常工作,但我会将您的答案标记为可以接受。