簡體   English   中英

將mongoose模式導入另一個模式文件會導致導入的模式未定義

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

文件結構:

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

所以我有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)

當我在console.log中導入變量時,它們是未定義的。

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 ); 

是的我可以將它們全部放在一個文件中,但由於它們都互相使用但在頁面上較低的方案不能包括在上面的方案中。

Thanx在先進

我的解決方案更多的是解決方法:刪除其他模式的所有內容並制作它們

Schema.Types.Mixed

最后我不需要這樣做,因為我創建了一個graphQL服務器,並且我意識到GraphQL以我想要的方式處理輸出/輸入,而不必在Mongoose中定義它。

一切都很好,但似乎我們需要明確要求對象的架構部分。

而不是player: [PlayersSchema]

嘗試player: [PlayersSchema.schema]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM