当前位置: 首页 > 知识库问答 >
问题:

CastError:mongoose中模型的路径“\u id”处的值“findByName”转换为ObjectId失败

年烈
2023-03-14

我得到下面的错误

CastError: Cast to ObjectId在ObjectId.cast(/用户/我/项目/nodejs/node_modules/猫鼬/lib/错误/cast.js:29: 11)的新CastError(/用户/我/项目/nodejs/node_modules/猫鼬/lib)的模型产品路径_id的值findByName失败/schema/objectid.js:156:13)

用Nodejs编写的API

DB: mongoDB

控制器:

exports.product_details_by_name = function (req, res) {
    Product.findByProductName(req.params.name, function (err, product) {
        if (err){console.log(err); return next(err);}
        res.send(product);
    })
};

路由

router.get('/test', product_controller.test);
router.post('/create', product_controller.product_create);
router.get('/:id', product_controller.product_details);
router.put('/:id/update', product_controller.product_update);
router.delete('/:id/delete', product_controller.product_delete);
router.get('/findByName', product_controller.product_details_by_name); // two get methods?

型号:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let ProductSchema = new Schema({
    name: {type: String, required: true, max: 100},
    price: {type: Number, required: true},
});

ProductSchema.findByProductName =  function(nam) { // is it right to do?
console.log("name"+nam);
  return this.find({ "name":  nam  });
};
// Export the model
module.exports = mongoose.model('Product', ProductSchema);

我正在接邮递员的电话:

URL:localhost:8080/products/findByName

请求机构:

  {name: "name2"}

共有1个答案

西门智
2023-03-14

您忘记在模型中的findbyProductName函数中添加回调参数。

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let ProductSchema = new Schema({
  name: {type: String, required: true, max: 100},
  price: {type: Number, required: true},
});

// Export the model
let Product = module.exports = mongoose.model('Product', ProductSchema);

exports.findByProductName =  function(nam, callback) { 
  console.log("name"+nam);
  Product.find({ "name":  nam  }).exec(callback);
};
 类似资料:
  • 我的应用程序可以在本地工作,但在生产中,我似乎无法使用猫鼬从mongo获取特定的东西。我尝试过:

  • 我的控制器obter_todos_precos只是一个console.log,没有使用任何模型,但我得到以下错误: 为什么我会有这种行为?

  • 嘿,伙计们真的需要一些关于删除路由的帮助。我正在使用RESTful路由,尝试遵循约定,添加删除路由时,我得到错误: CastError:模型"Blog"的路径"_id"处的值"X"转换为ObjectId失败 我已经在stackoverflow上搜索了这个问题,我能想到的最好的版本是猫鼬有一个错误。我把它回滚到V4.10.0,仍然在处理这个问题。我的代码如下:

  • 我看到了几个帖子与类似的我但我仍然得到同样的错误 这是我的用户模式 我的路线 我的应用程序。js 这是我的护照。我正在使用本地护照 passport可以将用户保存到数据库中 模型“用户”的路径“_id”处的值“586cc8b3ea780c071bbe2469”转换为ObjectId失败 我已经构建了两个应用程序,它们使用passport oauth,与上面显示的方式完全相同。所以我不知道为什么我会

  • Comments是嵌套在Post架构中的数组。我想通过推送一个新的评论到评论数组更新相应的帖子。但是得到了错误:CastError:对于模型“post”的路径“_id”处的值“comments”,向ObjectId的强制转换失败 阅读相关帖子 尝试使用“mongoose.types.objectid”,但不起作用 猫鼬版^5.5.4 我在这里使用的所有ID都是有效的 我认为问题出在“comment

  • 我正在尝试用mongodb和nodejs制作一个应用程序。我做了一个特殊的路由,它有参数,并且运行良好。 我还做了另一个get路线,它有。每次我收到该错误时向该路由发送请求时: 我的路线是: 当我向上面的路由发出get请求时,我得到了该错误: 我的产品模型是: 我怎样才能解决这个问题?