angularjs - 使 Angular 路由与 Express 路由一起工作

标签 angularjs node.js express

我在设置 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/

相关文章:

angularjs - md-select 仅在第一次单击 OS X 时有效

node.js - 密码哈希+盐如何工作

javascript - 使用 Jade 包含整个脚本目录?

node.js - 语法错误 : Unexpected token import - Express

html - 防止浏览器窗口调整大小

javascript - 正则表达式 Javascript,带空格的负前瞻

node.js - Jitsu 没有方法 'help'/Nodejitsu 不行吗?

node.js - 类型错误 : Cannot read property 'define' of undefined

javascript - 将post表单值从jade提交到node js

angularjs - 告诉 ui-router 不要更改状态定义上的位置