最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

猫鼬:CastError:在路径“

IT培训 admin 2浏览 0评论

猫鼬:CastError:在路径“

我是node.js的新手,所以我觉得这将是我忽略的愚蠢之举,但我仍无法找到解决问题的答案。我想做的是创建一个路径,该路径将创建一个新的子对象,将其添加到父对象的子对象数组中,然后将该子对象返回给请求者。我遇到的问题是,如果我将字符串ID传递给findById,节点将崩溃,并带有

TypeError:对象{}没有方法'cast'

如果我尝试传递一个ObjectId,我得到

CastError:在路径“ _id”处,值“ [object Object]”的转换为ObjectId失败

这是我的代码的粗略概述:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId; //Have also tried Schema.Types.ObjectId, mongoose.ObjectId

mongoose.connect('mongodb://user:password@server:port/database');

app.get('/myClass/:Id/childClass/create', function(request, result) {
  var id = new ObjectId(request.params.Id);
  MyClass.findById(id).exec( function(err, myClass) {
    if (err || !myClass) { result.send("error: " + err + "<br>" + JSON.stringify(id) || ("object '" + request.params.Id + "' not found: " + id)); return; }
    var child = ChildClass();
    myClass.Children.addToSet(child);
    myClass.save();
    result.send(child);
  });
});

如果我使用路径“ / myClass / 51c35e5ced18cb901d000001 / childClass / create”执行此代码,则这是代码的输出:

错误:CastError:在路径“ _id”处,值“ [object Object]”的转换为ObjectId失败{“ path”:“ 51c35e5ced18cb901d000001”,“ instance”:“ ObjectID”,“ validators”:[],“ setters”:[],“ getters”:[],“ _ index”:null}

我尝试使用findOne并传入{_id:id},但这似乎正是findById所做的。我尝试了其他站点上列出的ObjectId的不同类。我试过像函数而不是构造函数那样调用ObjectId(),并且返回undefined。在这一点上,我的想法已经用尽了,似乎谷歌搜索答案似乎没有帮助。关于我在做什么错的任何想法吗?

而且,就像我说的那样,我是node / Mongo / Mongoose / Express的新手,所以如果有更好的方法可以实现我的目标,请告诉我。我感谢所有反馈。

编辑:

在Peter Lyons解决后,我在Google上遇到了另一个错误,并发现了findByIdAndUpdate,它可以按预期运行,并且完全符合我的期望。我仍然不确定为什么findById和findOne会给我这样的问题,并且我很想知道(也许需要提交错误报告),所以我将把它保持打开状态,以防其他人有答案。

我是node.js的新手,所以我觉得这将是我忽略的愚蠢之举,但我仍无法找到解决问题的答案。我想做的是创建一个...

回答如下:

简短答案:使用mongoose.Types.ObjectId

猫鼬:CastError:在路径“

我是node.js的新手,所以我觉得这将是我忽略的愚蠢之举,但我仍无法找到解决问题的答案。我想做的是创建一个路径,该路径将创建一个新的子对象,将其添加到父对象的子对象数组中,然后将该子对象返回给请求者。我遇到的问题是,如果我将字符串ID传递给findById,节点将崩溃,并带有

TypeError:对象{}没有方法'cast'

如果我尝试传递一个ObjectId,我得到

CastError:在路径“ _id”处,值“ [object Object]”的转换为ObjectId失败

这是我的代码的粗略概述:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId; //Have also tried Schema.Types.ObjectId, mongoose.ObjectId

mongoose.connect('mongodb://user:password@server:port/database');

app.get('/myClass/:Id/childClass/create', function(request, result) {
  var id = new ObjectId(request.params.Id);
  MyClass.findById(id).exec( function(err, myClass) {
    if (err || !myClass) { result.send("error: " + err + "<br>" + JSON.stringify(id) || ("object '" + request.params.Id + "' not found: " + id)); return; }
    var child = ChildClass();
    myClass.Children.addToSet(child);
    myClass.save();
    result.send(child);
  });
});

如果我使用路径“ / myClass / 51c35e5ced18cb901d000001 / childClass / create”执行此代码,则这是代码的输出:

错误:CastError:在路径“ _id”处,值“ [object Object]”的转换为ObjectId失败{“ path”:“ 51c35e5ced18cb901d000001”,“ instance”:“ ObjectID”,“ validators”:[],“ setters”:[],“ getters”:[],“ _ index”:null}

我尝试使用findOne并传入{_id:id},但这似乎正是findById所做的。我尝试了其他站点上列出的ObjectId的不同类。我试过像函数而不是构造函数那样调用ObjectId(),并且返回undefined。在这一点上,我的想法已经用尽了,似乎谷歌搜索答案似乎没有帮助。关于我在做什么错的任何想法吗?

而且,就像我说的那样,我是node / Mongo / Mongoose / Express的新手,所以如果有更好的方法可以实现我的目标,请告诉我。我感谢所有反馈。

编辑:

在Peter Lyons解决后,我在Google上遇到了另一个错误,并发现了findByIdAndUpdate,它可以按预期运行,并且完全符合我的期望。我仍然不确定为什么findById和findOne会给我这样的问题,并且我很想知道(也许需要提交错误报告),所以我将把它保持打开状态,以防其他人有答案。

我是node.js的新手,所以我觉得这将是我忽略的愚蠢之举,但我仍无法找到解决问题的答案。我想做的是创建一个...

回答如下:

简短答案:使用mongoose.Types.ObjectId

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论