我的应用程序主要在Angular中,我想将它连接到Express来加密和发送私有API密钥,这样它们就不会被明确地存储在客户端上。
我的问题是浏览器将静态服务的js文件读取为text / html,这导致我的javascript无法加载。你可以看到响应是200并且文件在那里,只是没有被正确解释
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类型。
答案 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用于每个请求。