node.js - Node.js 路由发送到不正确的控制器
问题描述
问题:当我调用此路由/topproducts
时,它进入orders_get_order
函数而不是orders_most_ordered_products
. 这很奇怪,我不明白为什么它输入了错误的功能。
控制台错误信息:
message: 'Cast to ObjectId failed for value "topproducts" at path "_id" for model "Order"',
name: 'CastError',
stringValue: '"topproducts"',
kind: 'ObjectId',
value: 'topproducts',
path: '_id',
reason: undefined,
model: Model { Order }
我的 route.js
router.get("/topproducts", checkAuth, OrdersController.orders_most_ordered_products);
我的控制器 order.js
exports.orders_most_ordered_products = async (req, res) => {
try{
let order = await order_service.get_most_ordered_products();
if ('error' in order){
res.status(order['status']).json(order)
}else{
res.status(200).json(order)
}
}catch(err){
console.log("most orders")
console.log(err)
//res.status(500).json(fatal_error_status);
}
};
//get uma order
exports.orders_get_order = async (req, res) => {
try{
let order = await order_service.get(req.params.orderId);
if ('error' in order){
res.status(order['status']).json(order)
}else{
res.status(200).json(order)
}
}catch(err){
console.log("get orders")
console.log(err)
//res.status(500).json(fatal_error_status);
}
};
然后它发送到服务 order.js
exports.orders_most_ordered_products = async (req, res) => {
try{
let order = await order_service.get_most_ordered_products();
if ('error' in order){
res.status(order['status']).json(order)
}else{
res.status(200).json(order)
}
}catch(err){
console.log("most orders")
console.log(err)
}
};
exports.orders_get_order = async (req, res) => {
try{
let order = await order_service.get(req.params.orderId);
if ('error' in order){
res.status(order['status']).json(order)
}else{
res.status(200).json(order)
}
}catch(err){
console.log("get orders")
console.log(err)
}
};
解决方案
问题是路由的顺序,将 Id 作为参数的路由是第一个,所以服务器虽然我正在调用那个。
router.get("/topproducts", checkAuth, OrdersController.orders_most_ordered_products);
router.get("/:orderId", checkAuth, OrdersController.orders_get_order);
推荐阅读
- firebase - 来自 Cloud Firestore 的颤振流:如何将数据从快照复制到类并打印
- python - 如何根据值范围将张量流中的整数列转换为字符串
- python - 试图从字典列表中删除重复的字典值
- javascript - 如何从其他文件夹调用axios
- c++ - libpng 警告:使用 libpng-1.4.12 构建但使用 1.6.37 c++ mac 运行的应用程序
- python - 通过 Jenkins 在 Docker Django 应用程序上运行 Selenium 测试
- python - PyQt5如何启动多进程但不是主线程
- node.js - Sinon中JSON模块的存根独立函数
- swagger - 如何在 swagger doc 中记录 RSQL 过滤器?
- flutter - setMockMessageHandler'.channel.setMockMessageHandler((动态消息) async {