【发布时间】:2015-10-23 02:45:50
【问题描述】:
我有以下文件 -
1) 索引.html
2) app.js(这里是角度控制器)
3) routes.js(我正在尝试从这里加载 index.html - 监听 localhost:3000)
4) 索引.css
5) node_modules 文件夹
routes.js:
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
server.listen(3000);
app.use("/node_modules", express.static('node_modules'));
app.use("/public", express.static('public'));
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.sockets.on('connection', function(socket){
socket.on('send message', function(data){
io.sockets.emit('new message', data);
});
});
当我通过从文件资源管理器中单击正常打开 index.html 文件时,它可以正常打开。
但是,当我运行 routes.js 以获取相同的 index.html 文件时,我得到了没有角度效果的原始 HTML。 这是为什么呢?
谢谢!
编辑:
我现在可以从 localhost:3000/public/ 访问我的 index.css 和 app.js。
我在routes.js 中使用了app.use("/public", express.static('public'));。
但现在我的页面中只能包含css,但看起来仍然不包含 angular。我看不到标签。请看上面带有标签的index.html 文件的截图。
如何包含角度?它不是包含在 HTML 本身中的吗?
index.html -
<html>
...
...
<link href="node_modules/bootstrap-3.3.5-dist/css/bootstrap.min.css" rel="stylesheet">
<link href="public/index.css" rel="stylesheet">
<body>
...
...
<script src="node_modules/angular/angular.js"></script>
<script src="public/ui-bootstrap-tpls-0.13.1.js"></script>
<script src="node_modules/socket.io/node_modules/socket.io-client/socket.io.js"></script>
<script src="public/app.js"></script>
</body>
</html>
编辑: 我通过包含解决了它
app.use("/node_modules", express.static('node_modules'));
在我的 routes.js 文件中。所以现在 express 也使用该文件夹,因此该文件夹中的 angular 文件用于为我的 index.html 文件提供服务。
现在,运行我的localhost:3000/ 会给我预期的结果。谢谢!
【问题讨论】:
-
node_modules 是 nodejs 保存其模块的文件夹,angular.js 是一个 Web 应用程序框架,它不应该以任何方式放在 node_modules 中,对于 socker.io 客户端库也是如此,你应该采取它脱离了node_modules。同样在其他链接中重新公开,路径与我的示例中的磁盘上的文件夹不同,您应该将文件放在磁盘上的 public/javascript 文件夹中,但以
-
@teamnorge 感谢您的回复。我现在可以访问我的 js 和 css 文件。但是角度似乎不起作用。请看我编辑的问题。我正在使用并引用我下载的 angularJS 的本地副本,而不是链接到 CDN url。那是错的吗?纠正我!
-
拥有 angularjs 的本地副本没问题,只需将其放入适当的目录(在 public/javascript 中的某个位置),正如我上面提到的 node_modules 不是保存它的适当位置。
-
我解决了@teamnorge。只是按照相同的逻辑来提供静态文件。我还包括它以通过 app.use("/node_modules", express.static('node_modules')); 为我的“node_modules”服务。现在,该页面正在使用 Angular。感谢“teamnorge”坚持我的问题。我很乐意接受您的回答,请在您的回答中包含此内容 - app.use("/node_modules", express.static('node_modules'));。
-
对不起,我不会包含它,因为我不建议有一个到 node_modules 文件夹的路由,最好把你的 web 相关库从它里面取出并放在另一个文件夹中,在 expressjs 中也设置为静态.
标签: javascript html angularjs node.js express