2015-03-13 2 views
1

Я использую стек MEAN для app, у меня есть пользователи, с которыми я регистрирую и регистрируюсь, используя satellizer все работает хорошо.Nodejs получить пользователя по id

Но когда я пытаюсь сделать get пользователем по id, я ничего не получаю, я могу сделать запрос, чтобы получить всех пользователей, но не по 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/ 
+0

Что значение 'req.user' до' User.findById' позвонить? – JohnnyHK

+0

is unifined –

ответ

2

вы пропустили важную роль в вашем серверный вызов, «обеспечитьAuthenticated»:

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

ensureAuthenticate этой примерной реализации спутника - очень простая версия, она помещает содержимое токена в req.user. Это достаточно хорошо для вашего запроса. Как правило, в реальном приложении вместо этого нужно использовать паспортное ПО, загружать пользователя в промежуточное программное обеспечение и помещать его в req.user.

при использовании среднего стека обычно req.user установлен на полный пользовательский объект, то есть на экземпляр материала мангуста. Вы хотите искать по идентификатору, чтобы дать в запросе идентификатор:

попробовать

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

вместо этого.

Но, учитывая, что req.user - это именно тот объект, который вы запрашиваете, весь запрос может просто не понадобиться вообще.

Если вы хотите посмотреть другой пользователь, чем аутентичный, вам нужно передать идентификатор, который вы хотите запросить в URL пути, как правило, что-то вроде:

GET /api/users/{id} 

, то вы можете получить этот идентификатор используя

req.params.id 

и передать его findById() вызова

+0

Я попробовал это, я получил эту ошибку Не могу прочитать свойство «_id» undefined –

+0

ok, это означает, что вы не аутентифицированы. req.user является неопределенным, так как паспорт говорит вам, что пользователь не зарегистрирован. Для RESTFul API вам необходимо передать учетные данные при каждом вызове, как правило, в угловом режиме, установив заголовки заголовков на $ http – Reto

+0

Хорошо, но если не аутентифицирован. Как я нахожу пользователя в своем db после регистрации.! –

Смежные вопросы