I am building ecommerce website using MERN stack. And I am getting error while testing using 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 );
Error:- TypeError: Order.find is not a function at exports.userPurchaseList (C:UsersRahulMernBootcampprojbackendcontrollersuser.js:47:9)
TESTING this route using POSTMAN.
Advertisement
Answer
You have exported an object so in your backend/controllers/user.js
you could import it like so from destructuring from the object then the rest of your code would be okay
const {Order} = require("../models/order");
or accessing it using the dot notation when calling the find Function //importing it at the top
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); }); };