简体   繁体   English

将mongoose模式导入另一个模式文件会导致导入的模式未定义

[英]import mongoose schema into another schema file makes the imported schema undefined

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: 所以我有4个架构,我想在我的所有架构中使用其他架构但是当我导入它时我得到一个错误:

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. 当我在console.log中导入变量时,它们是未定义的。

playersSchema.js: 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: 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 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 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 Thanx在先进

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. 最后我不需要这样做,因为我创建了一个graphQL服务器,并且我意识到GraphQL以我想要的方式处理输出/输入,而不必在Mongoose中定义它。

All is good, but it seems that we need to explicitly ask for the schema part of the object. 一切都很好,但似乎我们需要明确要求对象的架构部分。

Instead of player: [PlayersSchema] , 而不是player: [PlayersSchema]

try player: [PlayersSchema.schema] 尝试player: [PlayersSchema.schema]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM