NodeJS在没有res.render的情况下在视图中显示用户名

时间:2014-02-09 11:56:12

标签: angularjs node.js express passport.js

如何将用户信息从req.user传递到视图Nodejs Passport display username,这是一个很好的答案。我在网上看到的所有答案,包括这个答案,还看着mean.io使用玉渲染引擎。在我的情况下,我正在使用res.sendfile(.... static.html)发送文件,并使用angular进行路由。

在这种情况下,将用户信息传递给视图的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您想继续发送静态文件而不使用res.render(),则必须在客户端请求用户信息,而不是将其传递给服务器。

有几种方法可以使用Angular请求用户详细信息。最简单的可能是需要信息的控制器:

// UserController.js
app.controller('UserController', function (UserService) {    
    UserService.resolveUser().success(function (user) {
        $scope.user = user;
    });    
});

// UserService.js
app.factory('UserService', function ($http) {    
    return {
        resolveUser: function() {            
            return $http.get('/user');
        },        
    }    
});

您还可以使用$routeProvider上的resolve方法延迟加载路线,直到请求并提供用户信息为止。

...或者,如果您需要所有路线上的用户信息,您可以手动引导您的应用。

如果您需要使用Angular或Node.js的其他信息,请告诉我,我在此处未提及。

修改

关于您的评论,您可以使用$ http来请求您的用户信息,然后再引导您的应用:

angular.module('app', []);

// We only need invoke in order to use the $http service
// before we are bootstrapped.
angular.bootstrap().invoke(function ($http) {

    $http.get('user.json').success(function (data) {
        angular.element(document).ready(function () {
            angular.module('app').constant('USER', data);
            angular.bootstrap(document, ['app']);
        });
    });

});

angular.module('app').run(function (USER) {
    console.log(USER);
});

您可以找到this Plunker的实时示例。