【问题标题】:NodeJS display username in view without res.renderNodeJS在视图中显示用户名而不使用res.render
【发布时间】:2014-03-06 16:40:28
【问题描述】:

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

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

【问题讨论】:

  • 我的回答解决了你的问题吗?否则请告诉我。如果是这样,请随意接受。这对你、我和社区的其他人都有帮助:)

标签: angularjs node.js express passport.js


【解决方案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 找到一个实时示例。

【讨论】:

  • 您将如何手动引导应用程序?我想这就是我一直在寻找的。谢谢
  • 我有空的时候一定要看看这个,但非常感谢你的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 2018-08-27
相关资源
最近更新 更多