Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Javascript 为什么我的Mongoose DB模式可能是;“铸造到未定义的”;当它的实例放在第二个模式中时?_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 为什么我的Mongoose DB模式可能是;“铸造到未定义的”;当它的实例放在第二个模式中时?

Javascript 为什么我的Mongoose DB模式可能是;“铸造到未定义的”;当它的实例放在第二个模式中时?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我已经创建了一个名为Game的Mongoose DB模式,以及另一个名为Player的模式,其中包含所述游戏模式对象的数组。当我运行测线时,player.games=[game]如下面的app.js代码片段所示,我得到以下错误: Cast to undefined failed for value “{ gameID: 551175ee7a81c2c10c000002, points: 10 }” at path “games” 请问我做错了什么 app/models/Game.js(整个文件

我已经创建了一个名为Game的Mongoose DB模式,以及另一个名为Player的模式,其中包含所述游戏模式对象的数组。当我运行测线时,player.games=[game]如下面的app.js代码片段所示,我得到以下错误:

Cast to undefined failed for value “{ gameID: 551175ee7a81c2c10c000002, points: 10 }” at path “games”
请问我做错了什么

app/models/Game.js(整个文件):

app/models/Player.js(整个文件):

app.js(代码片段):


您正在将
Game
模型传递给父模式定义
PlayerSchema
而不是
GameSchema
模式对象。在您的
GameSchema
模块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 = 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(...)
}

您正在将
Game
模型传递给父模式定义
PlayerSchema
而不是
GameSchema
模式对象。在您的
GameSchema
模块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 = 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(...)
}

您正在将
Game
模型传递给父模式定义
PlayerSchema
而不是
GameSchema
模式对象。在您的
GameSchema
模块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 = 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(...)
}

您正在将
Game
模型传递给父模式定义
PlayerSchema
而不是
GameSchema
模式对象。在您的
GameSchema
模块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 = 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(...)
}

克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请

^正在“var game=new game()”处获取“TypeError:对象不是函数”

调整基本上是为game.js添加一个包装器模型

编辑的game.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(...)
}

克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请

^正在“var game=new game()”处获取“TypeError:对象不是函数”

调整基本上是为game.js添加一个包装器模型

编辑的game.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(...)
}

克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请

^正在“var game=new game()”处获取“TypeError:对象不是函数”

调整基本上是为game.js添加一个包装器模型

编辑的game.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(...)
}

克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请

^正在“var game=new game()”处获取“TypeError:对象不是函数”

调整基本上是为game.js添加一个包装器模型

编辑的game.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.js中的第二个变量
Schema
更改为
GameSchema
,因为还有另一个
Schema
mongoose对象,然后进行必要的级联更新。除此之外,我认为你的工作变化没有任何问题。你可以通过打勾来接受你的答案作为解决方案。谢谢chridam,我会的。MJB.您可能应该将game.js中的第二个变量
Schema
更改为
GameSchema
,因为还有另一个
Schema
mongoose对象,然后执行必要的级联更新。除此之外,我认为你的工作变化没有任何问题。你可以通过打勾来接受你的答案作为解决方案。谢谢chridam,我会的。MJB.您可能应该将game.js中的第二个变量
Schema
更改为
GameSchema
,因为还有另一个
Schema
mongoose对象,然后执行必要的级联更新。除此之外,我认为你的工作变化没有任何问题。你可以通过打勾来接受你的答案作为解决方案。谢谢chridam,我会的。MJB.您可能应该将game.js中的第二个变量
Schema
更改为
GameSchema
,因为还有另一个
Schema
mongoose对象,然后执行必要的级联更新。除此之外,我没有看到任何