【问题标题】:Nodejs get user by idNodejs通过id获取用户
【发布时间】:2015-03-14 03:53:48
【问题描述】:

我将 MEAN 堆栈用于app,我有用户使用satellizer 注册和登录,一切正常。

但是当我尝试通过它的 ID get 用户时,我什么也得不到,我可以请求获取所有用户,但不能通过 ID。

注意我使用 Ionicframework 作为 forntEnd 框架。 这是我的后端端点的代码:

app.get('/api/me', function(req, res) {
  User.findById(req.user, function(err, user) {
    console.log(req.user);
    console.log(user);
    res.send(user);
  });
})

我的前端代码控制器:

.controller('ProfileCtrl', function($scope, $http, $stateParams, $ionicLoading, $timeout, $stateParams) {

    $ionicLoading.show({
        template: 'Loading...'
    });

    $http.get('http://localhost:3000/api/me')
        .success(function(data) {
            console.log("Recived data via HTTP", data);

            $timeout(function() {
                $ionicLoading.hide();
                $scope.user = data;
            }, 1000);
        })
        .error(function() {
            console.log("Error while getting the data");
            $ionicLoading.hide();
        });
})

请求标头:

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ar;q=0.6,fi;q=0.4,it;q=0.2,en-GB;q=0.2,en-CA;q=0.2
Authorization:Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1NTAxYjAxMmExMjRlZjIwMTc4M2ExMTQiLCJleHAiOjE0MjcxMzk0NDV9.x9QEdE4E-Vh1SklCheiZqsnJsg8jGzdJnPx2RXeZqS8
Connection:keep-alive
Host:localhost:3000
Origin:http://localhost:8100
Referer:http://localhost:8100/

【问题讨论】:

  • req.userUser.findById 调用之前的值是多少?

标签: angularjs node.js mongodb http ionic-framework


【解决方案1】:

您错过了服务器调用中的一个重要部分,即“ensureAuthenticated”:

app.get('/api/me', ensureAuthenticated, function(req, res) {
   User.findById(req.user, function(err, user) {
    res.send(user);
 });
});

这个卫星示例实现的ensureAuthenticate 是一个非常简单的版本,它只是将token.sub 的内容放入req.user 中。这足以满足您的查询。通常在一个真正的应用程序中,人们会使用护照中间件,在中间件中加载用户并将其放入 req.user。

当使用平均堆栈时,通常将req.user 设置为完整的用户对象,即猫鼬文档的一个实例。你想按 id 搜索,所以给查询一个 id:

试试

User.findById(req.user._id, function(err, user) {

改为。

但是,考虑到 req.user 已经是您要查询的对象,可能根本不需要整个查询。

如果您想查找与经过身份验证的用户不同的用户,则需要在 URL 路径中传递您要查询的 id,通常类似于:

GET /api/users/{id}

那么你可以使用

req.params.id

并将其传递给findById() 调用

【讨论】:

  • 我试过了我得到这个错误无法读取未定义的属性'_id'
  • 好的,这意味着您没有通过身份验证。 req.user 未定义是护照告诉您没有登录用户的方式。对于 RESTFul API,您需要在每次调用时传递凭据,通常通过在 $http 上设置身份验证标头以角度完成
  • 好的,但如果未通过身份验证。注册后我如何在我的数据库中找到用户。!
  • 首先检查用户是否真的存储在数据库中(使用 mongo CLI 或一些 mongoDB UI)。然后检查您的 Angular 应用程序是否正在发送身份验证标头(使用浏览器开发人员控制台)。然后检查你的 node.js / express 路由中是否设置了“passport”身份验证中间件。
  • 我检查了数据库中的用户,我也可以执行查找功能来让我在数据库中拥有的所有用户正常工作。这是请求标头:将其添加到问题中,因为它在评论中看起来很乱护照中间件已设置
猜你喜欢
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 2017-05-12
  • 2021-04-09
  • 2021-03-06
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多