使Angular路线适用于Express路线

kir*_*gol 11 node.js express angularjs

我设置Angular路线与Express一起工作陷入僵局.

我试着像Express 4,NodeJS,AngularJS路由那样做,但是没有用.每次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");
});
Run Code Online (Sandbox Code Playgroud)

在我的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"
            });

    }]);
Run Code Online (Sandbox Code Playgroud)

我的浏览器控制台中没有任何错误.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"
  }
Run Code Online (Sandbox Code Playgroud)

这是我的文件结构:

--app (angular app)
   --components
   --js
   --css
   --img
   --assets
   --partials
   --index.html
--node-modules
--server.js (here express settigs are)
Run Code Online (Sandbox Code Playgroud)

另外,我按如下方式进行了更改以考虑所有静态​​资源,但仍然不起作用:

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 });
});
Run Code Online (Sandbox Code Playgroud)

请帮助,因为我找不到解决方案.谢谢!

jos*_*ins 6

如果未传递路径express.use(),则默认为/.您设置的进程规则*要么是冗余的,要么甚至可能不起作用.

此外,由于您正在使用html5mode,因此您需要明确地从资源中分离路由,以便Express不会尝试index.html为所有请求提供文件.

Angular UI-Router on 尝试此示例的大小:

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
Run Code Online (Sandbox Code Playgroud)