刷新时页面返回404,参数作为模板传递

时间:2014-08-24 05:14:58

标签: angularjs express routes

当用户刷新页面时,我的角度路线出现问题,或直接访问浏览器中的链接(而不是遍历网站中的链接)。

thing.js - 角度工厂

.factory( 'Things', ['$resource', function ( $resource ) {

    return $resource('/api/things/:name', {
        name: '@name'
    }, {
        update: {
            method: 'PUT',
            isArray: true
        },
        get: {
            method: 'GET',
            isArray: true
        }
    });

}])

app.js - 角度路线

.config( function ( $routeProvider, $locationProvider, $httpProvider ) {    
    $locationProvider.html5Mode(true);
    $routeProvider
        .when('/', {
            templateUrl: 'thing/view',
            controller: 'ThingCtrl'
    });

routes.js - 表达路线

app.route( '/api/thing/:name' )
    .get( things.all )
    .put( things.update );
app.route( '/things/*' )
    .get( index.partials );
app.param( 'name', things.load );

index.js - 表达控制器

exports.partials = function( req, res ) {

    var stripped = req.url.split('.')[0];
    var requestedView = path.join('./', stripped);

    res.render( requestedView, function( err, html ) {
        if( err ) {
            console.log( "Error rendering partial '" + requestedView + "'\n", err );
            res.status( 404 );
            res.send( 404 );
        } else {
            res.send( html );
        }
    });
};

错误消息

Error rendering partial 'things/nameOfThing'
{ [Error: Failed to lookup view "things/nameOfThing" in views directory "/Users/johnsmith/projects/theProject/app/views"]
    view:
    { name: 'things/nameOfThing',
      root: '/Users/johnsmith/projects/theProject/app/views',
      defaultEngine: 'html',
      ext: '.html',
      engine: [Function],
      path: undefined } }

我希望刷新使用thing / view.html模板,但它似乎想要使用传递的参数。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您必须在 app config 中为位置提供商启用html5模式,如下所示

$locationProvider.html5Mode(true);

将应用程序的基本路径设置为' /'。

您可以将其更改为false以使用基于散列的位置。

$locationProvider.html5Mode(false);