laravelバックグラウンドから来るので、node.js/graphQL/MongoDBにアクセスしようとしましたが、nest.js
フレームワークにぶつかりました。これは見栄えがいいので、単純なGraphQL APIを設定しようとしましたそのため、すべての機能をテストして理解するために、ユーザー用のマングーススキーマとモデル(type-graphql
)と、ミューテーションを介してそのようなユーザーを作成するためのDTO
を作成しました。
これはかなりうまくいきますが、ユーザーの設定にネストされたオブジェクトを追加して、これがどのように機能するかを試してみましたが、単に取得できず、nest.js
またはtype-graphql
も見つかりませんそのような実装の具体的な例。これは、nest.js
の「コードファースト」アプローチを使用して実行できないだけですか?スキーマジェネレータはコンパイル中に常に私にエラーを与えるので:
"UnhandledPromiseRejectionWarning:エラー:設定のGraphQL出力タイプを特定できません。"
user.model.ts
import { Field, ID, ObjectType } from 'type-graphql'
import UserSettingsType from './user.settings.type'
@ObjectType()
export class User {
@Field((type) => ID)
id: string
@Field()
email: string
@Field((type) => UserSettingsType)
settings: {}
}
user.settings.type.ts
import { Field, ObjectType } from 'type-graphql'
@ObjectType()
export class UserSettings {
@Field()
theme: string
@Field()
description?: string
@Field((type) => [String])
visited: string[]
}
new-user.input.ts
import { IsOptional, IsEmail, IsBoolean, Length, MaxLength, IsArray } from 'class-validator'
import { Field, InputType } from 'type-graphql'
import UserSettingsType from '../graphql/user.settings.type'
@InputType()
export class NewUserInput {
@Field()
@IsEmail()
email: string
@Field((type) => UserSettingsType)
@IsOptional()
@IsArray()
settings: {}
}
ご覧のとおり、別のファイルで新しいタイプのUserSettingsを(nest.js
のベストプラクティスに従って)定義し、それをUserモデル内のタイプおよび新しいユーザーのDTOクラスとして割り当てました。エラーはDTO class
(モデルではなく)に対してスローされ、そこでUserSettingsTypeではなく[String]のようなものに変更すると、コンパイルされます。
この実際の問題にリゾルバまたはサービス/マングースロジックが必要かどうかはわかりませんが、もちろんそれも投稿できます!
同様の問題がExpressからnestjsに移行しました。
docs を読んだ後、問題はネストされたオブジェクトではなく、間違ったインポートであることがわかりました。
@nestjs/graphql
の代わりにtype-graphql
インポートを使用する必要があります。
例えば。
// changes this
import { Field, ID, ObjectType } from 'type-graphql'
// to
import { Field, ID, ObjectType } from '@nestjs/graphql'
同じことがtype-graphql
からの他のインポートにも適用されます