Вызов пользователей из angular to node (MEAN) означает отправку только электронной почты и _id в angular - PullRequest
0 голосов
/ 16 января 2019

Я использую следующий код ..

// Node.js
router.get('/users/all', authenticate, (req, res) => {
    User.find({some query}).select('firstName lastName email').then((users) => {
        res.send(users);
    });


//Angular Service
let opts = { headers: this.getCommonHeaders(), params: new HttpParams() };
return this.http.get(getUserDataUrl, opts)
      .pipe(
        map(response => {
          // here is the problem
          console.log(response.json());
          return response.json()
        }),
        catchError(this.handleErrors)
      );

В заголовках опций я упомянул тип данных:

  getCommonHeaders() {
    return new HttpHeaders({
      'Content-Type':  'application/json',
      'x-auth': this.getToken()
    })
  }

В console.log (response.json ()) я получаю только электронную почту и _id в объекте массива. При добавлении того же console.log (user) в node.js перед res.send (user) отображаются все данные с именами firstName и lastName

Затем я добавил .lean () в функцию User. это позволило появиться остальным firstName и lastName. Как получить все данные без преобразования их в простые объекты?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Попробуйте использовать res.json ("JSON Object"); вместо res.send () ..

В противном случае попробуйте проверить БД с помощью такого инструмента, как robomongo

0 голосов
/ 16 января 2019

Мне кажется, что это проблема. Когда вы используете метод find () в mongoose, он выдает массив. поэтому вы конвертируете этот массив в json и отправляете его с помощью res.send () поэтому при доступе к нему с помощью Angular. это может привести к сбою и неправильному формату, поэтому попробуйте изменить код в узле js следующим образом. Вместо find () попробуйте использовать findOne () в мангусте следующим образом. Я предполагаю, что вы только собираетесь взять одного пользователя из этого запроса, верно?

// Node.js
router.get('/users/all', authenticate, (req, res) => {
User.findOne({some query}).select('firstName lastName email').then((user) => {
    res.send(user); // there was a typo I changed it too. look in the question not user it was users.
});
...