为什么我的Mongoose DB模式之一可能是“;强制转换为未定义的“;当它的实例被放置在第二个模式中时
Why might one of my Mongoose DB schemas be being "cast to undefined" when instances of it are placed in a second schema?
我创建了一个名为Game的Mongoose DB模式,以及另一个称为Player的模式,其中包含所述Game模式对象的数组。当我运行player.games=〔game〕显示在下面的app.js片段中,我得到以下错误:
Cast to undefined failed for value “{ gameID: 551175ee7a81c2c10c000002, points: 10 }” at path “games”
请问我做错了什么?
app/models/Game.js(整个文件):
var mongoose = require( "mongoose" );
var Schema = mongoose.Schema;
var GameSchema = new Schema({
_id : false,
id : false,
gameID : Schema.ObjectId,
points : Number
});
module.exports = mongoose.model( "Game", GameSchema );
app/models/Player.js(整个文件):
var mongoose = require( "mongoose" );
var Game = require( "../models/game" );
var Schema = mongoose.Schema;
var PlayerSchema = new Schema({
socialID : Number,
games : [ Game ]
});
module.exports = mongoose.model( 'Player', PlayerSchema );
app.js(代码段):
router.route( '/players' ).post( function( req, res )
{
var game = new Game();
game.gameID = req.body.gameID;
game.points = req.body.points;
var player = new Player();
player.socialID = req.body.socialID;
player.games = [ game ];
player.save(... etc.
柴达木,谢谢。你建议的解决方案没有奏效,^但通过对它进行一些小的调整,我使它奏效了。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择等等?
^在"var game=new game()"中获取"TypeError:对象不是函数"
调整基本上是为game.js 添加了一个Wrapper模型
编辑游戏.js:
var mongoose = require( 'mongoose' );
var Schema = mongoose.Schema;
var Schema = new Schema({
_id : false,
id : false,
gameID : Schema.ObjectId,
points : Number
});
module.exports = mongoose.model( 'Game', Schema );
附加game_wrapper.js
var Game = require( '../models/game' );
module.exports = Game.Schema;
编辑的player.js:
var mongoose = require( 'mongoose' );
var GameWrapper = require( '../models/game_wrapper' );
var Schema = mongoose.Schema;
var Schema = new Schema({
socialID : Number,
games : [ GameWrapper ]
});
module.exports = mongoose.model( 'Player', Schema );
编辑app.js:
var Player = require( './app/models/player' );
var Game = require( './app/models/game' );
router.route( '/players' ).post( function( req, res )
{
var game = new Game({
gameID: req.body.gameID,
points: req.body.points
});
var player = new Player({
socialID: req.body.socialID,
games: [ game ]
});
player.save(...)
}
将Game
模型传递到父模式定义PlayerSchema
,而不是GameSchema
模式对象。在您的GameSchema
模块应用程序/models/Game.js中,将其更改为:
var mongoose = require( "mongoose" );
var Schema = mongoose.Schema;
var GameSchema = new Schema({
_id : false,
id : false,
gameID : Schema.ObjectId,
points : Number
});
module.exports = GameSchema;
然后将PlayerSchema
定义更改为:
var mongoose = require( "mongoose" );
var GameSchema = require( "../models/game" );
var Schema = mongoose.Schema;
var PlayerSchema = new Schema({
socialID: Number,
games: [GameSchema]
});
module.exports = mongoose.model( 'Player', PlayerSchema );
在您的路由中,将您的请求对象封装到模式中:
router.route( '/players' ).post( function( req, res )
{
var game = new Game({
gameID: req.body.gameID,
points: req.body.points
});
var player = new Player({
socialID: req.body.socialID,
games: [game]
});
player.save(...)
}
相关文章:
- 显示模块模式在Knockout中设置模型的新实例
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 为什么我的Mongoose DB模式之一可能是“;强制转换为未定义的“;当它的实例被放置在第二个模式中时
- 如何在不选择模式配置参数的情况下,使用mongoose在MongoDB模式实例化中的关联数组/对象中执行foreach
- 使用模块模式时,如何创建对象的新实例
- 模块化模式中的私有实例变量
- Jquery:在一个字符串中查找所有实例模式,提示用户替换模式的所有实例,然后进行替换
- JavaScript 工厂模式中的检查实例
- 用于存储/检索Backbone.js的模式查看与dom元素关联的实例
- 我们如何使用新的运算符和工厂模式在JavaScript中创建类的实例
- 具有继承同一父级的类的sibings实例的主干继承模式
- 使用模块模式和实例化新对象之间的区别
- 替换字符串中匹配的最后一个模式实例
- Javascript模块模式;没有给出正确的实例
- 错误:[$injector:unp]未知提供程序:modalInstanceProvider<-模式实例<-
- 不会扰乱eslint的javascript实例化模式
- 同步实例化模式——将JSON扁平化为实际的循环数据结构
- 如何在Javascript中使用具有多个中介实例的中介模式
- 为什么在实例模式下使用p5.js时没有定义常量?
- Durandal和JavaScript严格模式.如何使实例变为Knockout