import mongoose schema into another schema file makes the imported schema undefined

纵然是瞬间 提交于 2020-01-02 23:23:46

问题


File structure:

│   resolvers.js
│   schema.js
│
└───schemas
        matchesSchema.js
        playersSchema.js
        teamsSchema.js
        tournamentsSchema.js

So I have 4 schema's and I want to use the other schema's in the all my schema's but when I import it I get an error:

C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\mongoose\lib\schema.js:425
      throw new TypeError('Invalid value for schema Array path `' + prefix + key + '`');
      ^

TypeError: Invalid value for schema Array path `matches`
    at Schema.add (C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\mongoose\lib\schema.js:425:13)
    at new Schema (C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\mongoose\lib\schema.js:99:10)
    at Object.<anonymous> (C:/Users/phara0h/Dropbox/esports-scores.com/nodeTest/src/schemas/tournamentsSchema.js:8:34)
    at Module._compile (module.js:570:32)
    at loader (C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\babel-register\lib\node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\babel-register\lib\node.js:154:7)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (C:/Users/phara0h/Dropbox/esports-scores.com/nodeTest/src/schemas/teamsSchema.js:5:1)
    at Module._compile (module.js:570:32)
    at loader (C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\babel-register\lib\node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (C:\Users\phara0h\Dropbox\esports-scores.com\nodeTest\node_modules\babel-register\lib\node.js:154:7)
    at Module.load (module.js:487:32)

When I console.log the imported variable they are undefined.

playersSchema.js:

import mongoose, { Schema } from 'mongoose';
import timestamps from 'mongoose-timestamp';
import { MatchesSchema } from './matchesSchema';
import { TeamsSchema } from './teamsSchema';
import { TournamentsSchema } from './tournamentsSchema';

// Mongoose Schema definition
export const PlayersSchema = new Schema({
    active: Boolean,
    captain: {type: Boolean, default: false},
    activeTeam: String,
    birthDate: Date,
    country: String,
    firstName: String,
    lastName: String,
    nickName: String,
    matches: [MatchesSchema],
    picture: String,
    position: String,
    steamId: String,
    twitch: String,
    teams: [TeamsSchema],
    tournaments: [TournamentsSchema]
});
PlayersSchema.plugin(timestamps);
PlayersSchema.index({ activeTeam: 'text', country: 'text', firstName:     'text', lastName: 'text', nickName: 'text' });
export const PlayerDB = mongoose.model( 'Players', PlayersSchema );

matchesSchema.js:

import mongoose, { Schema } from 'mongoose';
import timestamps from 'mongoose-timestamp';
import { PlayersSchema } from './playersSchema';
import { TeamsSchema } from './teamsSchema';
import { TournamentsSchema } from './tournamentsSchema';

// Mongoose Schema definition
export const MatchesSchema = new Schema({
    dateUTC: String,
    ended: Boolean,
    lenght: String,
    matchDetails: Schema.Types.Mixed,
    matchId: Number,
    player: [PlayersSchema],
    teams: [TeamsSchema],
    tournament: {type: String, ref: TournamentsSchema },
    winner: String
});
MatchesSchema.plugin(timestamps);

export const MatchesDB = mongoose.model( 'Matches', MatchesSchema );

teamsSchema.js

import mongoose, { Schema } from 'mongoose';
import timestamps from 'mongoose-timestamp';
import { PlayersSchema } from './playersSchema';
import { MatchesSchema } from './matchesSchema';
import { TournamentsSchema } from './tournamentsSchema';

// Mongoose Schema definition
export const TeamsSchema = new Schema({
    country: String,
    teamTag: String,
    logo: String,
    matches: [MatchesSchema],
    name: String,
    players: [PlayersSchema],
    steamId: String,
    url: String,
    tournaments: [TournamentsSchema]
});
TeamsSchema.plugin(timestamps);
TeamsSchema.index({ teamTag: 'text', country: 'text', name: 'text' });
export const TeamsDB = mongoose.model( 'Teams', TeamsSchema );

tournamentsSchema.js

import mongoose, { Schema } from 'mongoose';
import timestamps from 'mongoose-timestamp';
import { PlayersSchema } from './playersSchema';
import { MatchesSchema } from './matchesSchema';
import { TeamsSchema } from './teamsSchema';

// Mongoose Schema definition
export const TournamentsSchema = new Schema({
    description: String,
    endDate: String,
    itemdef: Number,
    leagueid: Number,
    matches: [MatchesSchema], //<--- this causes the error
    name: String,
    organizer: String,
    production: String,
    prizepool: String,
    players: [PlayersSchema],
    results: String,
    startDate: String,
    teams: [TeamsSchema],
    tournamentUrl: String
});
TournamentsSchema.plugin(timestamps);
TournamentsSchema.index({ description: 'text', name: 'text', organizer : 'text' });
export const TournamentsDB = mongoose.model( 'Tournaments', TournamentsSchema );

Yes I could put them all in one file but since they all use each other but on the page lower schemes can't be included in to the above ones.

Thanx in advanced


回答1:


My solution what is more a work around: removed all the inclusions of the other schema's and made them

Schema.Types.Mixed

In the end I didn't need to do this since I made a graphQL server and I realized that GraphQL handled the output/input in a manner I wanted without having to define it in Mongoose.




回答2:


All is good, but it seems that we need to explicitly ask for the schema part of the object.

Instead of player: [PlayersSchema],

try player: [PlayersSchema.schema]



来源:https://stackoverflow.com/questions/43502870/import-mongoose-schema-into-another-schema-file-makes-the-imported-schema-undefi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!