无法直接导航到URL Angular UI Router

时间:2015-08-02 00:03:43

标签: angularjs node.js requirejs angular-ui-router pug

这是我的路由器文件: 它嵌套在require.js块中并配置为使用Jade模板

define([
    './app',
    'angular.uirouter'
], function(app, angularUIRouter) {
    "use strict";

    // ROUTES
    app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {

        // loads url from the index
        $urlRouterProvider.otherwise('/');

        $locationProvider.html5Mode(true);

        $stateProvider
            .state('dashboard', {
                url:'/dashboard',
                views: {
                    'core' : {
                        templateUrl: '/articles/dashboard'
                    }
                }
            }) 
    }]);
});

这是我的Express.js路由器文件:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
    res.render('main', { 
        title: 'Express' 
    });
});

router.get('/dashboard', function(req, res) {
    console.log("/dashboard requested");
});

router.get('/articles/:name', function (req, res) { 
    var name = req.params.name;
    res.render('articles/' + name);
});

module.exports = router;

当我转到localhost:3000 / dashboard时,它向服务器发出GET请求。如何配置Angular UI Router来处理GET请求而不是服务器?

注意:我仍然可以访问localhost:3000 / articles / dashboard并查看信息中心。另外,

a(ui-sref="dashboard")

正确加载仪表板。

1 个答案:

答案 0 :(得分:3)

angular和ui路由器都无法处理服务器GET。 Angular $ locationProvider html5Mode仅解决客户端设置 - url不包含#和位置控件也是URL中的路径部分。

Html5模式需要服务器端配置。每个请求都必须返回应用程序入口点 - 通常是index.html。

例如

router.get('/dashboard', function(req, res) {
  res.sendfile('path-to/index.html');
});