Node.js res.setHeader('content-type','text/javascript'); 将响应javascript推送为文件下载

Amo*_*rni 26 node.js

场景:考虑以下代码,将JavaScript作为Node.JS服务器的响应.

var http = require('http');

http.createServer(function (req, res) {
var JS_Script = 'function Test() { alert("test success")}';
res.setHeader('content-type', 'text/javascript');
res.end(JS_Script);
}).listen(8811);
Run Code Online (Sandbox Code Playgroud)

问题:强制浏览器下载文件.

问题:如何在浏览器上进行渲染?

注意:使用相同的.net Web服务HTTP-header: 'content-type', 'text/javascript'

因此,其明确的以下陈述并不成立.
如果您希望Web浏览器呈现HTML,则应将其更改为:

Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)

更新:在content-type下载期间检查它application/octet-stream

但是当我用curl命中一个请求时,以下是输出:

C:\>curl -is http://localhost:8811/
HTTP/1.1 200 OK
Content-Type: text/javascript
Content-Length: 166
Date: Tue, 09 Apr 2013 10:31:32 GMT
Connection: keep-alive

function Test() { alert("test success")}
Run Code Online (Sandbox Code Playgroud)

mit*_*esh 39

使用application/javascript内容类型,而不是text/javascript

text/javascript提到已经过时了.请参阅参考文档.

http://www.iana.org/assignments/media-types/application

SO上也看到这个问题.

更新:

我已经尝试执行你给出的代码,但下面的代码不起作用.

res.setHeader('content-type', 'text/javascript');
res.send(JS_Script);
Run Code Online (Sandbox Code Playgroud)

这对我有用.

res.setHeader('content-type', 'text/javascript');
res.end(JS_Script);
Run Code Online (Sandbox Code Playgroud)

正如robertklep建议的那样,请参考节点http docs,没有response.send().

  • `setHeader`甚至没有被尊重,所以还有其他事情要发生. (2认同)

小智 8

您可以直接设置内容类型,如下所示:

res.writeHead(200, {'Content-Type': 'text/plain'});
Run Code Online (Sandbox Code Playgroud)

有关参考,请参阅nodejs Docs 链接.