将mongoose模式导入另一个模式文件会导致导入的模式未定义 [英] import mongoose schema into another schema file makes the imported schema undefined

查看:76
本文介绍了将mongoose模式导入另一个模式文件会导致导入的模式未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

文件结构:

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

所以我有4个模式,我想在我的所有模式中使用其他模式,但是当我导入它时出现错误:

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)

当我 console.log 导入的变量时,它们是未定义的。

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

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 in advanced

推荐答案

我的解决方案更多的是解决方法:
删除了其他模式的所有内容并使它们成为

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

Schema.Types.Mixed

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

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.

这篇关于将mongoose模式导入另一个模式文件会导致导入的模式未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆