TypeError: Order.find — это не функция

#javascript #node.js #mongodb #mongoose #postman

#javascript #node.js #mongodb #мангуст #почтальон

Вопрос:

Я создаю веб-сайт электронной коммерции, используя MERN stack. И я получаю ошибку при тестировании с использованием Postman.

backend/controllers/user.js

 const User = require("../models/user");
const Order = require("../models/order");

exports.userPurchaseList = (req, res) => {
  Order.find({ user: req.profile._id })
    .populate("user", "_id name")
    .exec((err, order) => {
      if (err) {
        return res.status(400).json({
          error: "No Order in this account",
        });
      }
      return res.json(order);
    });
};
  

backend/models/Order.js

 const mongoose = require("mongoose");
const { ObjectId } = mongoose.Schema;

const ProductCartSchema = new mongoose.Schema({
  product: {
    type: ObjectId,
    ref: "Product",
  },
  name: String,
  count: Number,
  price: Number,
});

const ProductCart = mongoose.model("ProductCart", ProductCartSchema);

const OrderSchema = new mongoose.Schema(
  {
    products: [ProductCartSchema],
    transaction_id: {},
    amount: { type: Number },
    address: String,
    status: {
      type: String,
      default: "Recieved",
      enum: ["Cancelled", "Delivered", "Shipped", "Processing", "Recieved"],
    },
    updated: Date,
    user: {
      type: ObjectId,
      ref: "User",
    },
  },
  { timestamps: true }
);

const Order = mongoose.model("Order", OrderSchema);

module.exports = { Order, ProductCart };
  

backend/models/User.js

 const mongoose = require("mongoose");
const crypto = require("crypto");
const uuidv1 = require("uuid/v1");

var userSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
      maxlength: 32,
      trim: true,
    },
    lastname: {
      type: String,
      maxlength: 32,
      trim: true,
      // required: false,
    },
    email: {
      type: String,
      required: true,
      trim: true,
      unique: true,
    },
    userinfo: {
      type: String,
      trim: true,
    },
    encry_password: {
      type: String,
      required: true,
    },
    salt: String,
    role: {
      type: Number,
      default: 0,
    },
    purchases: {
      type: Array,
      default: [],
    },
  },
  { timestamps: true }
);

module.exports = mongoose.model("User", userSchema);
  

backend/routes/user.js

 router.get(
  "/orders/user/:userId",
  isSignedIn,
  isAuthenticated,
  userPurchaseList
);
  

Ошибка:-
Ошибка типа: Order.find не является функцией
в exports.userPurchaseList (C:UsersRahulMernBootcampprojbackendcontrollersuser.js:47:9 )

ТЕСТИРОВАНИЕ этого маршрута с использованием POSTMAN.

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

1. Именование не должно быть проблемой. Потому что я следовал этому же соглашению об именовании во всех других моделях, и я не сталкиваюсь с какими-либо проблемами с ними, кроме этой. Спасибо

2. Проблему с этой ошибкой часто можно обнаружить с помощью небольшой отладки. console.log('Order') , Вероятно, позволил бы вам быстро найти проблему…

Ответ №1:

Вы экспортировали объект, поэтому в вашемbackend/controllers/user.js

вы могли бы импортировать его таким образом из деструктурирования из объекта, тогда остальная часть вашего кода была бы в порядке

 const {Order} = require("../models/order");
  

или
доступ к нему с использованием точечной записи
при вызове функции find
//импортируем его сверху

 const Order = require("../models/order");

exports.userPurchaseList = (req, res) => {
  Order.Order.find({ user: req.profile._id })
    .populate("user", "_id name")
    .exec((err, order) => {
      if (err) {
        return res.status(400).json({
          error: "No Order in this account",
        });
      }
      return res.json(order);
    });
};