在模型的路径"_id "处,投向ObjectId的值失败,但我没有进行任何查询。

问题描述 投票:0回答:1

我有一个快递路由,从前端用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");
  }
});
node.js mongodb express mongoose
1个回答
0
投票

你有另一个路由,也符合 /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

© www.soinside.com 2019 - 2024. All rights reserved.