我在设置 Angular 路由以使用 Express 时陷入僵局。
我在这里尝试过 Express 4, NodeJS, AngularJS routing但这没有用。每次 url 更改时,静态 index.html 都会提供服务,但 Angular 不会捕获部分内容。
在我的 Express 中,我有以下代码:
var express = require("express");
var app = express();
app.use(express.static(__dirname + '/app'));
app.use("*",function(req,res){
res.sendFile(path.join(__dirname,"app/index.html"));
});
app.listen(1337, function(){
console.log("Server is listening on port 1337");
});
在我的 Angular 应用程序中,我有以下内容:
var app = angular.module("myapp",["ngRoute","appControllers"]);
app.config(["$routeProvider","$locationProvider",function($routeProvider,$locationProvider){
$locationProvider.html5Mode(true);
$routeProvider
.when("/list",{
templateUrl: "/partials/users.html",
controller: "userListCntr"
})
.when("/edit", {
templateUrl: "/partials/edit.html",
controller: "userEditCntr"
})
.when("/register", {
templateUrl: "/partials/register.html",
controller: "registerCntr"
})
.when("/login", {
templateUrl: "/partials/login.html",
controller: "registerCntr"
});
}]);
我的浏览器控制台没有任何错误。 html 检查器显示:
<!-- ngView: -->
所以指令有点初始化。
以及依赖列表:
dependencies": {
"angular": "1.3.x",
"angular-mocks": "1.3.x",
"jquery": "1.10.2",
"bootstrap": "~3.1.1",
"angular-route": "1.3.x",
"angular-resource": "1.3.x",
"angular-animate": "1.3.x"
}
这是我的文件结构:
--app (angular app)
--components
--js
--css
--img
--assets
--partials
--index.html
--node-modules
--server.js (here express settigs are)
另外,我对所有静态资源进行了如下更改,但仍然无法正常工作:
app.use(express.static(__dirname+ "/app"));
app.use('/js', express.static(__dirname + '/app/js'));
app.use('/dist', express.static(__dirname + '/../dist'));
app.use('/css', express.static(__dirname + '/app/css'));
app.use('/assets', express.static(__dirname + '/app/assets'));
app.use('/components', express.static(__dirname + '/app/components'));
app.use('/img', express.static(__dirname + '/app/img'));
app.use('/partials', express.static(__dirname + '/app/partials'));
app.all('/*', function(req, res, next) {
// Just send the index.html for other files to support HTML5Mode
res.sendFile('/app/index.html', { root: __dirname });
});
请帮忙,因为我找不到解决方案。谢谢!
最佳答案
如果您不将路径传递给 express.use()
,则默认为 /
。您为 *
设置的处理规则要么是多余的,要么甚至可能不起作用。
此外,由于您使用的是 html5mode
,因此您需要明确设置路由与资源,以便 Express 不会尝试为您的 index.html
文件提供所有请求。
从 Angular UI-Router 试试这个例子尺寸:
var express = require('express');
var app = express();
app.use('/js', express.static(__dirname + '/js'));
app.use('/dist', express.static(__dirname + '/../dist'));
app.use('/css', express.static(__dirname + '/css'));
app.use('/partials', express.static(__dirname + '/partials'));
app.all('/*', function(req, res, next) {
// Just send the index.html for other files to support HTML5Mode
res.sendFile('index.html', { root: __dirname });
});
app.listen(3006); //the port you want to use
关于angularjs - 使 Angular 路由与 Express 路由一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546524/