Expressjs对javascript文件的请求为text / html

时间:2015-05-08 05:19:12

标签: javascript node.js web express

我的应用程序主要在Angular中,我想将它连接到Express来加密和发送私有API密钥,这样它们就不会被明确地存储在客户端上。

我的问题是浏览器将静态服务的js文件读取为text / html,这导致我的javascript无法加载。你可以看到响应是200并且文件在那里,只是没有被正确解释 img

index.html有很多这样的脚本请求

<script type="text/javascript" src="/keys.js"></script>
<script type="text/javascript" src="/public/lib/underscore/underscore-min.js"></script>
<script type="text/javascript" src="/public/lib/jquery/dist/jquery.min.js"></script>
<script type="text/javascript"  src="/public/lib/bootstrap/dist/js/bootstrap.min.js"></script>
...

快速路由代码:

var express = require('express');
var path = require('path');

var app = express();

app.use(express.static(path.resolve('./public')));

app.get('*', function(req,res) {
    res.sendFile(path.resolve('./public/views/index.html'));
});

app.listen(3000);

任何有快递经验的人 - 提供不同MIME类型的静态文件的正确方法是什么?我最终还需要提供text / css类型。

2 个答案:

答案 0 :(得分:3)

您已将应用程序配置为针对每个请求返回index.html

app.get('*', function(req,res) {
    res.sendFile(path.resolve('./public/views/index.html'));
});

如此明确地尽快表达,为index.html提供任何和所有请求,包括您希望通过js标记返回script文件的请求。例如,对/public/lib/underscore/underscore-min.js的请求实际上会在/public/views/index.html返回文件。

一个简单的解决方法是返回index.html根请求:

app.get('/', function(req,res) {
    res.sendFile(path.resolve('./public/views/index.html'));
});

通过这种方式,您的index.html将在根目录中提供,但仍然可以访问您的javascript资源,因为您没有为每个请求提供index.html

此外,由于您已经明确表示可以在/public找到静态资产,因此在请求时无需包含该目录。因此,您的script包含应如下所示:

<script type="text/javascript" src="/lib/underscore/underscore-min.js"></script>
<script type="text/javascript" src="/lib/jquery/dist/jquery.min.js"></script>
<script type="text/javascript"  src="/lib/bootstrap/dist/js/bootstrap.min.js"></script>

答案 1 :(得分:2)

我认为这是你的问题:

app.get('*', function(req,res) {
    res.sendFile(path.resolve('./public/views/index.html'));
});

您发送index.html用于每个请求。