1

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

拜托,有没有人可以尽可能简单地解释我?

我的.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) {

});
4

2 回答 2

3

我认为你的问题的解决方案是type="text/javascript"你应该添加到你的脚本标签中,但这里是 mimetypes 的一个低点:

这是一些关于在使用原始 Nodejs 时设置标头的文本。

使用 Express 时也是如此。

这是wikipedia 上的 mimetypes

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

我是这样写的:

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

此处列出了许多 mimetype 。但我认为你可以用谷歌搜索“{file extension} mime type”之类的东西,谷歌会很好地为你服务。

或者,您可以使用这个小包将 -x 更改response.set('Content-Type', 'text/html')response.set('Content-Type', mime.lookup(x));字符串,例如“kuku.mpeg”,mime 将返回当前的 mimetype。我用它来解析插件,这些插件有很多子文件夹,每个子文件夹都有不同的文件类型。

于 2013-09-15T09:23:59.167 回答
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 协议的一部分。

于 2013-09-15T15:09:33.580 回答