【问题标题】:Angular NgRoute "/" works but the rest don't?Angular NgRoute "/" 可以工作,但其他的不行吗?
【发布时间】:2016-03-11 22:49:27
【问题描述】:

我有一个在 MEAN 堆栈上运行的应用程序,除了“/”之外,我似乎无法获得任何角度路径来工作。我已经用 ng-Route 和 ui-router 尝试过这个,并且都继续将“/”以外的任何内容(如 /contacts 或 /portfolio_item/4)发送回“/”。

这里是 app.js:

// using the express library in variable express
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

// specify that app is a new express application
var app = express();
app.use('/javascripts', express.static(__dirname + '/public/javascripts'));
app.use('/images', express.static(__dirname + '/public/images'));
app.use('/stylesheets', express.static(__dirname + '/public/stylesheets'));
app.use('/pages', express.static(__dirname + '/public/pages'));
app.use('/partials', express.static(__dirname + '/views/partials'));
app.use('/portfolio.json', express.static(__dirname + 'portfolio.json'));

app.get('*', function (req, res) {
    res.sendFile(__dirname + '/public/index.html');
});

这里是 angularapp.js:

var myApp = angular.module('myportfolio', ['ngRoute'])

myApp.config(function($routeProvider){
        $routeProvider
        .when('/', {
          templateUrl: '/pages/home.html',
          controller: 'mainController'
        })
        .when('/portfolio_item/:item_number', {
          templateUrl: '/pages/item.html',
          controller: 'portfolioController'
        })
        .when('/contacts', {
          templateUrl: '/pages/contact.html',
          controller: 'contactController'
        })
        .otherwise({ redirectTo: '/' });

无论我做什么,/portfolio_item/5 和 /contacts 都会一直向我显示 /pages/home.html... 奇怪的是只有索引才能工作。当我删除 ".when('/', {" 部分时,它只会向我显示来自任何 URL 的完全没有视图的布局。

我正在使用 C9 环境并运行 Node 服务器,如果这有影响的话?

【问题讨论】:

    标签: javascript angularjs node.js express url-routing


    【解决方案1】:

    如果您检查浏览器控制台,您应该会发现以下形式的错误:

    Uncaught SyntaxError: Unexpected token

    因为服务器不提供静态文件而发生错误。 express.static 被用作服务器上路由的中间件。

    要更正此问题,您需要包含以下行:

    app.use(express.static(__dirname + '/public'));
    

    这为公共文件夹中的所有静态文件提供服务。

    【讨论】:

    • 谢谢!这有助于纠正它。另一件事是我一直在检查 www.sitedomain.com/contacts 而不是 www.sitedomain.com/#/contacts...新手错误
    • 不客气。您能否将此答案标记为已接受,以便帮助下一个访问问题页面的人?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多