路由名称错误的MongooseJS奇怪的投射错误

时间:2018-06-05 19:39:21

标签: javascript node.js mongodb express mongoose

我正在处理后端,我有这条路径应该从数据库返回一个ID数组,以便以后延迟加载。我的路线定义如下:

 router.get('/list', (req, res) => {
   Insider.find({}, {_id}).then(insiders => {
     if (!insiders) {
       res.status(400).json({ error: 'unable to find list of insiders' });
     }
     res.json(insiders);
   }).catch(err => res.status(400).json(err));
 });

应该返回一个像[_id, _id, _id....]

这样的数组

但我得到一个非常奇怪的错误:

  

对于模型,路径“_id”处的值“list”的转换为ObjectId失败   “内部人员”CastError:对于值“list”at,转换为ObjectId失败   模型“内部人”的路径“_id”         在新的CastError(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ error \ cast.js:27:11)         在ObjectId.cast(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ schema \ objectid.js:158:13)         at ObjectId.SchemaType.applySetters(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ schematype.js:724:12)         at ObjectId.SchemaType._castForQuery(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ schematype.js:1113:15)         at ObjectId.SchemaType.castForQuery(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ schematype.js:1103:15)         at ObjectId.SchemaType.castForQueryWrapper(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ schematype.js:1082:15)         在演员表(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ cast.js:300:32)         在model.Query.Query.cast(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ query.js:3309:12)         在model.Query.Query._castConditions(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ query.js:1293:10)         在model.Query.Query._findOne(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ mongoose \ lib \ query.js:1518:8)         at process.nextTick(C:\ Users \ rutherfordc \ Documents \ GitHub \ ccs-express-mongo \ node_modules \ kareem \ index.js:333:33)         at _combinedTickCallback(internal / process / next_tick.js:131:7)         at process._tickCallback(internal / process / next_tick.js:180:9)

我已经确认它实际上是泄漏到我的路由处理程序中的路由名称。 (即我将S& G的路线更改为/jerry,错误中“list”替换为“jerry”)

2 个答案:

答案 0 :(得分:0)

我认为问题在于您的查找方法尝试将其更改为此类

 router.get('/list', (req, res) => {
 Insider.find({}, {id:0}).then(insiders => {
  if (!insiders) {
   res.status(400).json({ error: 'unable to find list of insiders' });
   }
     res.json(insiders);
  }).catch(err => res.status(400).json(err));
});

我认为您应该使用id而不是_id并将其值设置为0

答案 1 :(得分:0)

原来这是路线优先问题。在/:insiderId路线之前有一条/list路线。

道歉。