#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);
});
};