node.js中的标头 - 套接字io资源被解释为脚本但以MIME类型text / plain传输:

时间:2013-09-15 08:23:48

标签: node.js types http-headers socket.io mime

我是node.js的新手,我无法理解标头的工作原理。我试图在我的index.html中附加到我的项目fancybox但它不起作用。我正在使用c9.io工作区,所以它看起来像<script src="http://space.......c9.io/jquery.fancybox-1.3.4.js"></script> 我仍然在控制台中得到相同的错误: socket io资源被解释为脚本但是使用MIME类型text / plain传输:

拜托,有没有人可以解释我这么简单?

我的js文件

var http = require("http"),
express = require('express'),
    app = express(),
     server = app.listen(process.env.PORT),
        io = require('socket.io').listen(server)


app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});


io.sockets.on('connection', function (socket) {

});

2 个答案:

答案 0 :(得分:3)

我认为您的问题的解决方案有点type="text/javascript",您应该添加到您的脚本代码中,但这里是mimetypes的低点:

Here's some text关于在使用原始Nodej时设置标题。

使用Express时here's the same thing

这是mimetypes on wikipedia

我不是专家,但据我所知,从服务器发送到客户端(主要是浏览器)的每个文件或信息都带有这个mimetype,它基本上告诉浏览器如何处理文件/ chuck。你的浏览器足够聪明,可以正确处理该文件,即使他没有收到标题+他足够聪明,可以通知你其他浏览器可能不那么聪明。

这是我写的方式:

app.get('/',function(request,response){
  response.set('Content-Type', 'text/html'); // 'text/html' => mime type
  response.sendfile(__dirname + 'index.html')
}

列出了许多mimetypes here。但我认为你可以谷歌像“{文件扩展名} mime类型”,谷歌将很好地为你服务。

或者,您可以使用this little packageresponse.set('Content-Type', 'text/html')更改为response.set('Content-Type', mime.lookup(x)); - x是一个字符串,例如'kuku.mpeg',而mime将返回当前的mimetype。我用它来解决每个子文件夹都有不同文件类型的插件。

答案 1 :(得分:1)

HTTP标头是包含有关HTTP请求或响应的信息的字段。它可以帮助服务器或客户端识别如何处理数据,无论是接受什么类型的数据,请求或响应应该有多大,请求的来源,是否缓存数据等等。

在HTTP中,MIME标头告诉客户端或服务器将要发送或接收的数据类型。您收到的错误消息可能意味着浏览器认为它将接收MIME类型text/javascript但收到text/plain

Resource interpreted as script but transferred with MIME type text/plain

要解决此问题,请在发送脚本文件时指定内容类型:

app.get('/script.js', function(req, res) {
  res.set('Content-Type', 'text/javascript');
  res.sendfile('./script.js');
});

请注意,HTTP标头并非特定于Node.js,而是HTTP协议的一部分。