Node.js无法发送脚本?

时间:2014-01-21 17:39:43

标签: javascript node.js

我有这个简单的node.js服务器代码,它发送alert

var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){

    response.writeHeader(200, {"Content-Type": "application/javascript","Content-Length": "alert('');".length });
    response.write("alert('');");
    response.end();
}).listen(8080);
sys.puts("Server Running on 8080"); 

服务器已启动并正在运行:

enter image description here

我确实看到了响应的正确标题:

enter image description here

但脚本没有执行!

此外,控制台显示:

  

资源被解释为文档但以MIME类型传输   application / javascript:“http://xxxx.com:8080/”。

问题:

我缺少什么,如何使此警报工作?

2 个答案:

答案 0 :(得分:3)

要让浏览器执行脚本,我宁愿使用Content-Type:html&发送

<script type="text/javascript">alert('test');</script>

这是我在ajax存在之前用于“javascript流媒体”的旧技巧。

为此,浏览器必须知道它是一个HTML文档(或者“javascript url call”必须从现有的HTML上下文中初始化)

这样的事情:

<!DOCTYPE html>
<html>
<body>
<iframe src="your_js_node_url_here">
</body>
</html>

您可以为your_js_node_url传输任何javascript,保持“始终打开”连接。

当然,这是一个“老派”,但可以在没有websockets的情况下实现“代码推送”。

答案 1 :(得分:1)

对于浏览器执行您的JavaScript,必须要告诉它这是可执行代码(而不是要格式化和显示的文本。)

您可以在HTML文档中发送JavaScript,并使用SCRIPT标记,如下例所示:

var sys = require("sys"),
my_http = require("http");
my_http.createServer(function(request,response){

    response.writeHeader(200, {"Content-Type": "text/html", });
    response.write("<html><body><script>alert('hello');</script></body>");
    response.end();
}).listen(8080);
sys.puts("Server Running on 8080"); 

另一种方法是通过浏览器上的另一个JavaScript程序(a-la AJAX)获取JavaScript并让其他程序执行它。