Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js CastError:value“的转换为ObjectId失败”;findByName“;在路径上“_id";用于猫鼬模型_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js CastError:value“的转换为ObjectId失败”;findByName“;在路径上“_id";用于猫鼬模型

Node.js CastError:value“的转换为ObjectId失败”;findByName“;在路径上“_id";用于猫鼬模型,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在犯错误 CastError:对路径处的值“findByName”转换为ObjectId失败 “产品”型号的“标识” 在新的CastError(/Users/me/projects/nodejs/node_modules/mongoose/lib/error/cast.js:29:11) 在ObjectId.cast(/Users/me/projects/nodejs/node_modules/mongoose/lib/schema/ObjectId.js:156:13) 用Nodejs编写

我正在犯错误

CastError:对路径处的值“findByName”转换为ObjectId失败 “产品”型号的“标识” 在新的CastError(/Users/me/projects/nodejs/node_modules/mongoose/lib/error/cast.js:29:11) 在ObjectId.cast(/Users/me/projects/nodejs/node_modules/mongoose/lib/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"}

您忘记在模型中的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);
};

让我来编辑这个问题。我怀疑路由有问题,但我不确定是否也添加了回调。在路由进入错误路由之前,我也有同样的问题。你能像这个路由器一样安排你的路线吗;router.get('/findByName',product\u controller.product\u details\u by\u name);路由器.get('/:id',产品控制器.产品详细信息);router.post('/create',product\u controller.product\u create);router.put('/:id/update',product\u controller.product\u update);路由器.delete('/:id/delete',product\u controller.product\u delete);对这解决了问题,但现在我得到以下错误:
Product.findByProductName不是一个函数
尝试在模型中将exports.findByProductName链接到module.exports.findByProductName谢谢,它成功了。但我正试图像这里一样将该方法添加到模型中,但不确定这样做是否正确。。