(Nodejs, expressjs, mongodb) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'username' из неопределенного - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь распечатать автора сообщения из mongodb для клиента, но, к сожалению, моя ошибка с кодом. код, написанный fullstack javascript, я провел некоторый поиск, чтобы выяснить, что не так с кодом, и я не нашел своего ответа, поэтому, если кто-то может помочь мне, что не так с моим кодом. спасибо

const postsCollection = require("../db")
  .db()
  .collection("posts")
const ObjectID = require("mongodb").ObjectID
const User = require("./User")
let Post = function (data, userid) {
  this.data = data
  this.errors = []
  this.userid = userid
}
Post.prototype.cleanUp = function () {
  if (typeof this.data.title != "string") {
    this.data.title = ""
  } else if (typeof this.data.body != "string") {
    this.data.body = ""
  }
  // get rid of any bogus properties
  this.data = {
    title: this.data.title.trim(),
    body: this.data.body.trim(),
    createdDate: new Date(),
    author: ObjectID(this.userid)
  }
}
Post.prototype.validate = function () {
  if (this.data.title == "") {
    this.errors.push("You must provide a title")
  } else if (this.data.body == "") {
    this.errors.push("You must provide post content")
  }
}
Post.prototype.create = function () {
  return new Promise((resolve, reject) => {
    this.cleanUp()
    this.validate()
    if (!this.errors.length) {
      // save post into database
      postsCollection
        .insertOne(this.data)
        .then(() => {
          resolve()
        })
        .catch(() => {
          this.errors.push("Please try again later.")
          reject(this.errors)
        })
    } else {
      reject(this.errors)
    }
  })
}
Post.findSingleById = function (id) {
  return new Promise(async function (resolve, reject) {
    if (typeof id != "string" || !ObjectID.isValid(id)) {
      reject()
      return
    }
    let posts = await postsCollection
      .aggregate([{
          $match: {
            _id: new ObjectID(id)
          }
        },
        {
          $lookup: {
            from: "users",
            localField: "author",
            foreignField: "_id",
            as: "authorDocument"
          }
        },
        {
          $project: {
            title: 1,
            body: 1,
            createdDate: 1,
            author: {
              $arrayElemAt: ["$authorDocument", 0]
            }
          }
        }
      ]).toArray()
    // Clean up author property in each post object
    posts.map(function (post) {
      console.log("[+] something goes wrong")
      post.author = {
        username: post.author.username,
        avatar: new User(post.author, true).avatar
      }
      return post
    })
    if (posts.length) {
      console.log(posts[0])
      resolve(posts[0])
    } else {
      reject()
    }
  })
}
module.exports = Post

1 Ответ

0 голосов
/ 20 января 2020

Что-то не так с постом Объект
Ваш пост Объект не имеет имени пользователя
Пожалуйста, поставьте некоторые условия

posts.map(function (post) {
  console.log("[+] something goes wrong")
  post.author = {
    username: post.author && post.author.username, // here
    avatar: new User(post.author, true).avatar
  }
  return post
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...