Как исправить TypeError: не удается прочитать свойство ‘map’ неопределенного значения в моем приложении MEAN stack?

#javascript #node.js #angular #typescript #mean-stack

#javascript #node.js #angular #typescript #mean-stack

Вопрос:

В моем приложении я, когда получаю сообщения от своего серверной части NodeJS, в интерфейсе Angular пытаюсь преобразовать его с помощью pipe() оператора и с помощью map() функции.

Вот мой angular код, который отправляет http запрос на серверную часть,

 getPosts(userId: string, currentPage: number) {
    console.log(userId);
    this.http.get<{message: string, posts: any, maxPosts: number }> 
  ('http://localhost:3000/api/post/'   userId)
    .pipe(map((postData) => {
      console.log(postData);
      return { posts: postData.posts.map((post) => {
        return {
          title: post.title,
          content: post.content,
          id: post._id,
          imagePath: post.imagePath,
          creator: post.creator
        };
      }),
      maxPosts: postData.maxPosts};
    }))
    .subscribe(transformedPostsData => {
      this.posts = transformedPostsData.posts;
      this.postUpdate.next({
        post: [...this.posts],
        postCount: transformedPostsData.maxPosts
      });
    });
  }
  

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

  exports.getPosts = (req, res, next) => {
  let fetchedPost;
  let maxPosts = 10;
  Post.find({ creator: req.params.userId }).then(post => {
    if(post) {
      res.status(200).json({
        fetchedPost: post,
        message: "Post successful",
        max: maxPosts
      });
    } else {
      res.status(500).json({
        message: "Failed to get User Post"
      });
    }
  });
}
  

Моим первым предположением было, что запрос не содержал userId данных, по которым он должен извлекать записи, затем напечатал его с помощью console.log(userId) , все было в полном порядке.

Тогда я подумал, что серверная часть не возвращает никакой post или что-то в этом роде null . Затем я использовал console.log(postData) , который отлично печатал данные post.

Вот как это выглядит,

введите описание изображения здесь

Другие вопросы по SO, касающиеся этой ошибки, на самом деле не соответствовали моей ситуации. Я внимательно просмотрел их.

Даже минимальная подсказка означала бы большую помощь. Спасибо.

Комментарии:

1. вы импортировали map ( import { map } from 'rxjs/operators'; )?

2. Да, сэр, импортировал его в самой первой строке.

3. postData Имеет posts ли? Я предполагаю, postData.posts.map что проблема в этой карте.

4. профиль пользователя. service.ts.26 является console.log(postData) ? На выводе вашей консоли я вижу только fetchedPost , а не posts .

5. @Emma права, поскольку вы регистрируетесь postData , ваш вывод журнала не должен содержать fetchedPost но posts .