Piy*_*tal 1 mongoose mongodb node.js express
我试图从登录用户的数据库中获取订单,但是当我获取它时,我从数据库中收到错误,这是我的代码:-
// @desc Get logged in user orders
// @route GET /api/orders/myorders
// @access Private
const getMyOrders = asyncHandler(async (req, res) => {
const orders = await Order.find({ user: req.user._id })
res.json(orders);
})
Run Code Online (Sandbox Code Playgroud)
这是我的路线文件:-
import express from 'express';
import { addOrderItems, getMyOrders, getOrderById, updateOrderToPaid } from '../controllers/orderController.js';
import { protect } from '../middleware/authMiddleware.js';
const router = express.Router();
router.route('/').post(protect, addOrderItems)
router.route('/:id').get(protect, getOrderById)
router.route('/:id/pay').put(protect, updateOrderToPaid)
router.route('/myorders').get(protect, getMyOrders)
export default router;
Run Code Online (Sandbox Code Playgroud)
这是我的订单模型文件
import mongoose from 'mongoose';
const orderSchema = mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User'
},
orderItems: [
{
name: { type: String, required: true },
qty: { type: Number, required: true },
image: { type: String, required: true },
price: { type: Number, required: true },
product: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Product'
}
}
],
shippingAddress: {
address: { type: String, required: true },
city: { type: String, required: true },
postalCode: { type: String, required: true },
country: { type: String, required: true }
},
paymentMethod: {
type: String,
required: true
},
paymentResult: {
id: { type: String },
status: { type: String },
update_time: { type: String },
email_address: { type: String }
},
taxPrice: {
type: String,
required: true,
default: 0.0
},
shippingPrice: {
type: String,
required: true,
default: 0.0
},
totalPrice: {
type: String,
required: true,
default: 0.0
},
isPaid: {
type: Boolean,
required: true,
default: false
},
paidAt: {
type: Date
},
isDelivered: {
type: Boolean,
required: true,
default: false
},
deliveredAt: {
type: Date
}
}, {
timeStamps: true
})
const Order = mongoose.model('Order', orderSchema)
export default Order;
Run Code Online (Sandbox Code Playgroud)
我还上传了我的保护中间件,在其中添加了我的保护路由并从中获取用户
import jwt from 'jsonwebtoken';
import asyncHandler from 'express-async-handler';
import User from '../models/userModel.js';
const protect = asyncHandler(async (req, res, next) => {
let token;
if (req.headers.authorization && req.headers.authorization.startsWith('Bearer')) {
try {
token = req.headers.authorization.split(' ')[1]
const decoded = jwt.verify(token, process.env.JWT_SECRET)
req.user = await User.findById(decoded.id).select('-password')
next()
} catch (error) {
console.log(error)
res.status(401)
throw new Error('Not authorized, token not found')
}
}
if (!token) {
res.status(401)
throw new Error('Not authorized')
}
})
export { protect }
Run Code Online (Sandbox Code Playgroud)
我的错误:-
{
"message": "Cast to ObjectId failed for value \"myorders\" at path \"_id\" for model \"Order\"",
"stack": "CastError: Cast to ObjectId failed for value \"myorders\" at path \"_id\" for model \"Order\"\n at model.Query.exec (C:\\proShop\\node_modules\\mongoose\\lib\\query.js:4358:21)\n at model.Query.Query.then (C:\\proShop\\node_modules\\mongoose\\lib\\query.js:4450:15)\n at processTicksAndRejections (internal/process/task_queues.js:93:5)"
}
Run Code Online (Sandbox Code Playgroud)
我上传了我的所有文件和代码,任何人都知道解决方案,请告诉我。
小智 6
我认为问题是因为当你将 (/:id) 放在 (/myorder) 上方时,然后你用 /.../myorders 输入 URL,Route 会将 myorders 视为 id,并且它不是 ObjectId 类型
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |