Angular-fullstack 获取当前用户 ID

Posted

技术标签:

【中文标题】Angular-fullstack 获取当前用户 ID【英文标题】:Angular-fullstack get current user ID 【发布时间】:2015-05-12 00:38:45 【问题描述】:

我正在使用https://github.com/DaftMonk/generator-angular-fullstack。

我有 2 个架构:

图表 标题:字符串 数据集:数组 _creator:登录用户ID 用户 姓名 电子邮件 _id

当我 console.log 当前用户返回

$scope.getCurrentUser = Auth.getCurrentUser();        
console.log($scope.getCurrentUser);

但是当我尝试通过控制台记录 _id 时:

$scope.getCurrentUser = Auth.getCurrentUser();        
console.log($scope.getCurrentUser._id);

返回

未定义

谁能解释我做错了什么?

【问题讨论】:

也许你应该从 Angular 教程开始,阅读 javascript 的异步执行。谷歌的“角度承诺”。基本上,请求还没有解决,你要等待它被加载... 那为什么当我 console.log 它返回整个对象但 ._id 它未定义? 我不知道 angular-fullstack,但 Auth.getCurrentUser() 返回一个承诺,而不是你的 currentUser。您需要以下内容:Auth.getCurrentUser().then(function(result)// do something with result; result should be your currentUser); @Marius:当你传递一个引用时,控制台是一个观察者,而._id会被立即评估 除了这个问题,isLoggedIn 也没有正确更新。一些前端元素通过 ng-show/hide 依赖它。登录后,该函数仍然返回false,直到我刷新页面。有什么线索吗? 【参考方案1】:

chrome 控制台中的对象仅在首次打开时才被评估。

这意味着当你 console.log 一个像 Auth.getCurrentUser() 的返回值的对象时,控制台会显示一个对它的引用 - 这在日志调用时包含一个 promise 对象,但它很可能由当你在控制台上打开它时,你就会看到你正在寻找的属性。

另一方面,当您记录 $scope.getCurrentUser._id 时,这是对 Promise 对象进行属性查找的结果 - 它会打印属性的当前值,即 undefined

关于干净代码的注意事项:您的作用域变量称为 getCurrentUser,这让人认为它是一个 getter 函数,但实际上它是一个 getter 函数的返回值。这令人困惑。

【讨论】:

如果您查看getCurrentUser 的实现,您会发现它可以同步和异步工作。如果您不提供参数(如回调函数),它应该同步响应。不幸的是,情况并非如此。我错过了什么吗? @molerat 我知道你来自哪里,但你可以在 OP 的屏幕截图中看到一个 Promise 对象已返回给他。您的推理似乎是正确的,但也许当时的实施有所不同? (已经 1.5 年了......)无论哪种方式,您似乎都指出了与 OP 的最新 cmets 稍微无关的问题,我建议改为打开一个新问题。

以上是关于Angular-fullstack 获取当前用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 angular-fullstack 应用程序中更新后单个帖子不同步

如何部署 yeoman angular-fullstack 项目?

在 Angular-fullstack 中加载 local.env.js

如何使用 angular-fullstack 生成器语法使用 $scope 和 $watch?

如何在 Angular-Fullstack 生成的 Angular 1.5 组件中注入依赖项

将数据从 server/app.js 传递到控制器 Angular-fullstack + multer