我想通过电子邮件获取给定用户搜索的订单:“admin”,但出现错误:
MongooseError [CastError]: Cast to string failed for value "{}" at path "userData.email" for model "order".
我没有收到任何回复。
后台-js文件:
router.get('/user-orders', (req, res) => {
const user = req;
Order.find({ "userData.email": user }, (error, order) => {
if (error) {
console.log(error);
} else {
return res.json({ order });
}
})
})
前端 - 服务:
userOrders(user) {
return this.http.get<User>(this.userOrdersUrl, user);
}
前端 - ts 文件:
constructor(private orderService: OrderService, private router: Router) {
this.orderService.userOrders('admin').subscribe(
res => console.log(res),
err => console.log(err)
);
}
如果我在后端声明“用户”——一切正常:
router.get('/user-orders', (req, res) => {
const user = 'admin';
Order.find({ "userData.email": user }, (error, order) => {
if (error) {
console.log(error);
} else {
return res.json({ order });
}
})
})
但我必须从前端发送字符串“admin”。如何解决?
编辑:
订购型号:
const orderSchema = new Schema({
userData: {
firstname: String,
lastname: String,
address: String,
postcode: Object,
city: String,
country: String,
email: String,
phone: Number
},
items: {},
shipping: String,
sum: Number,
created: {
type: Date,
default: Date.now()
},
status: {
type:String,
default: 'order_placed'
}
});
最佳答案
我会更改您的路由器,以期望 url 中的用户 ID/电子邮件作为路径参数,然后该表达式将填充到 req.params
router.get('/user-orders/:id', (req, res) => {
Order.find({ "userData.email": req.params.id}, (error, order) => { ... });
}
然后,在您的前端,您需要将 url 调整为:
userOrders(userIdOrEmail) {
return this.http.get<User>(`${this.userOrdersUrl}/${userIdOrEmail}`);
}
关于javascript - Mongoose 错误 [CastError] : Cast to string failed for value "{}" at path "userData.email" for model "order",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65107645/