我有一个快递路由,从前端用axios调用。问题是,不管我把什么放到路由中,我总是得到同样的错误。
"在模型 "local "的路径"_id "处,"getTodosMisProductos "的值 "投向ObjectId失败"
我在该路由中没有对mongoose进行任何查询,但在其他路由中进行查询时,一切都正常。
我检查了中间件,但没有任何对mongoose的查询。
getTodosMisProductos
router.get("/getTodosMisProductos", auth, async (req, res) => {
/*
try {
const data = await Local.findOne({ user: req.user.id }).populate("products.producto");
console.log(data);
if (!data) {
return res
.status(404)
.json({ errors: [{ msg: "No se encontro el local" }] });
}
return res.status(200).json(data.products);
} catch (error) {
console.log(req.user.id);
console.error("error en llamado");
return res.status(500).send("Server Error");
}
*/
console.log("algo");
return res.status(200).json({ msg: "success" });
});
评论的代码是我需要使用的代码,我为了测试的目的改变了它,但即使是简单的新代码,我也得到了同样的错误。
认证中间件
const jwt = require("jsonwebtoken");
const config = require("config");
module.exports = function (req, res, next) {
// Get token from header
const token = req.header("x-auth-token");
// Check if not token
if (!token) {
return res
.status(401)
.json({ msg: "No tienes autorización para hacer esto" });
}
// Verify token
try {
const decoded = jwt.verify(token, require("../config/keys").jwtSecret);
req.user = decoded.user;
next();
} catch (error) {
res.status(401).json({ msg: "El token es inválido" });
}
};
途径的调用地
export const getAllProductos = () => async (dispatch) => {
try {
console.log("Esto se llama");
const res = await axios.get("/api/local/getTodosMisProductos/");
dispatch({
type: SET_PRODUCTS,
payload: res.data,
});
} catch (err) {
const errors = err.response.data.errors;
if (errors) {
errors.forEach((error) => dispatch(setAlert(error.msg, "danger")));
}
}
};
响应状态总是500(内部服务器错误)。
编辑
//@route GET api/local/:id
//@desc obtener local por id
//@access private
router.get("/:id", auth, async (req, res) => {
try {
const local = await Local.findById(req.params.id);
if (!local) {
return res
.status(404)
.json({ errors: [{ msg: "No se encontro el local" }] });
}
return res.status(200).json(local);
} catch (error) {
console.error(error.message);
res.status(500).send("Server Error");
}
});
你有另一个路由,也符合 /api/local/getTodosMisProductos/
显然,它得到了匹配的 /api/local/:id
,
你从哪里得到 req.params.id = "getTodosMisProductos"
并传给 await Local.findById(req.params.id)
而蒙哥斯不能转换 "getTodosMisProductos"
到 ObjectId
,因此出现错误。
声明路由的顺序会影响匹配的优先级。
顺序是先到先得,所以请确保你声明了 /api/local/addProducto
或任何其他以 /api/local/
之前 宣称 /api/local/:id