如何使用nodejs获取产品的所有评论

How to get all reviews of a product using nodejs

我正在创建一个电子商务应用程序,现在我想使用 nodejs 获取产品的所有评论,数据库是 mongoDB(使用 mongoose)。这是我的模式:

用户架构:

const userSchema = new Schema(
  {
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    isAdmin: { type: Boolean, required: true, default: false },
  },
  {
    timestamps: true,
  }
);

产品架构:

const productSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    required: true,
    ref: "users",
  },
  name: { type: String, required: true },
  image: { type: String, required: true },
  brand: { type: String, required: true },
  category: { type: String, required: true },
  description: { type: String, required: true },
  reviews: [
    {
      name: { type: String, required: true },
      rating: { type: Number, required: true },
      comment: { type: String, required: true },
      user: {
        type: Schema.Types.ObjectId,
        required: true,
        ref: "users",
      },
    },
    {
      timestamps: true,
    },
  ],
  rating: { type: Number, required: true, default: 0 },
  reviewNumber: { type: Number, required: true, default: 0 },
  price: { type: Number, required: true, default: 0 },
  countInStock: { type: Number, required: true, default: 0 },
});

我想获取产品的所有评论。这是我的控制器

//* desc   Get all reviews
//* route  GET /product/:id/review
//* access Public
const getAllReviews = async (req, res) => {
  try {
    const product = await Product.findById(req.params.id);
    const reviews = product.reviews.find({});
    return res.status(200).json({
      success: true,
      reviews,
    });
  } catch (error) {
    console.log(error);
    return res.status(500).json({
      success: false,
      message: "Internal server error",
    });
  }
};

但是当我使用 Postman 进行测试时。结果报错500,怎么才能得到所有review?

错误:

TypeError: #<Object> is not a function
    at Proxy.find (<anonymous>)
    at getAllReviews (D:\Workspace\Projects\e-commerce\server\src\controllers\product.controller.js:210:37)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

如果您想发送产品的所有评论,您不需要添加此行

const reviews = product.reviews.find({});

您只需输入

const reviews=product.reviews;