我是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) {
});
答案 0 :(得分:3)
我认为您的问题的解决方案有点type="text/javascript"
,您应该添加到您的脚本代码中,但这里是mimetypes的低点:
Here's some text关于在使用原始Nodej时设置标题。
使用Express时here's the same thing。
我不是专家,但据我所知,从服务器发送到客户端(主要是浏览器)的每个文件或信息都带有这个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 package将response.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协议的一部分。