Node.js/Express:通过ajax下载文件

gre*_*rep 1 javascript get node.js

我试图通过GET ajax调用动态请求文件下载.我有以下客户端代码:

$(function() {
    $('#submit').click(function() {
        $.ajax({
            type: "GET",
            url: "/download/" + "filename",
            dataType: "json",
            contentType: "application/json",
            complete: function() {
                console.log('Complete');
            },
            success: function() {
                console.log('Success');
            },
            error: function() {
                console.log('Error');
            }
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

在节点服务器上我也有以下行(请注意,我不知道这是否是正确的方法)

app.get('/download/:filename', function(req, res) {
    console.log(req.params);
    res.write(fs.readFileSync(__dirname + "/../public/javascripts/main.js", 'utf8'));
});
Run Code Online (Sandbox Code Playgroud)

所以我想实际下载那个javascript文件(最终是动态的).我该如何正确地做到这一点?有些东西告诉我,我需要指定标题/内容类型.

jam*_*rio 5

您应该返回内容类型和处置设置为:

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"main.js\"
Run Code Online (Sandbox Code Playgroud)

我相信你必须重定向到这个文件.如果我没弄错的话,你不能通过AJAX调用强制下载文件.