次ページ https://qiita.com/bontensuzuki/items/7cd598a7075f6c970f14
Seeding data
Keystonejsのtutorialsから学んでいきます。(ほとんど機械翻訳です)
https://www.keystonejs.com/tutorials/initial-data
このガイドでは、createItemsメソッドを使用してユーザーリストを作成し、それに初期データを追加する方法を示します。このプロセスはSeedingとも呼ばれます。
注:前の章では、コードは個別のファイルに分割されましたが、実際のコードベースではこれが推奨されますが、この部分では、明確にするためにすべてが1つのファイルに入れられています。
リスト設定
パッケージをインストールする
この章では、前の章とは異なるユーザースキーマを使用し、Todoリストの代わりに投稿リストを使用します。新しいプロジェクトから始めて、空のデータベースから始める(前の章のデータを削除する)のが最善です。また、次のパッケージがすべてインストールされていることを確認してください。
mkdirnew-project3cdnew-project3yarninityarnadd@keystonejs/keystone
yarnadd@keystonejs/adapter-mongoose
yarnadd@keystonejs/app-graphql
yarnadd@keystonejs/fields
yarnadd@keystonejs/app-admin-ui
yarnadd@keystonejs/auth-password
準備
まず、ユーザーリストを作成し、PasswordAuthStrategyを追加します。
index.jsのコード:
const{Keystone}=require('@keystonejs/keystone');const{PasswordAuthStrategy}=require('@keystonejs/auth-password');const{Text,Checkbox,Password}=require('@keystonejs/fields');const{GraphQLApp}=require('@keystonejs/app-graphql');const{AdminUIApp}=require('@keystonejs/app-admin-ui');const{MongooseAdapter}=require('@keystonejs/adapter-mongoose');constkeystone=newKeystone({name:'example-project',adapter:newMongooseAdapter(),});keystone.createList('User',{fields:{name:{type:Text},email:{type:Text,isUnique:true,},isAdmin:{type:Checkbox},password:{type:Password,},},});constauthStrategy=keystone.createAuthStrategy({type:PasswordAuthStrategy,list:'User',});module.exports={keystone,apps:[newGraphQLApp(),newAdminUIApp({enableDefaultRoute:true,authStrategy})],};ヒント:Keystone CLIを実行してkeystone-appを作成し、「スターター(ユーザー+認証)」を選択すると、同様の設定を行うことができます。このスタータープロジェクトには、ユーザーリスト、PasswordAuthStrategy、および構成済みのデータベースのシードがあります。とりあえず、手動で進めます。
メンバー登録
http://localhost:3000/admin/api
mutation{createUser(data:{name:"Mike",email:"test@test.test",password:"test1234",isAdmin:true}){name}}メンバーを登録できたか確認してみましょう
query{allUsers{id,name}}出力
{"data":{"allUsers":[{"id":"5eae81ad78af33930bac2700","name":"Mike"}]}}adminUIで確認
Keystone Admin UI: http://localhost:3000/admin
登録が確認できました
アイテムを作成する
createItemsメソッドには、キーがリストキーであり、値が挿入するアイテムの配列であるオブジェクトが必要です。例えば:
keystone.createItems({User:[{name:'John Duck',email:'john@duck.com',password:'dolphins'},{name:'Barry',email:'bartduisters@bartduisters.com',password:'dolphins'},],});注:データの形式は、keystone.createList()への呼び出しでのスキーマ設定と一致する必要があります。スキーマの例として、電子メールフィールドにはisUnique:trueが含まれているため、上記のコードでは、生成する必要がある各ユーザーに対して同じ電子メールを使用することはできません。
データベース接続時にデータをシードする方法の例:
constkeystone=newKeystone({name:'New Project',adapter:newMongooseAdapter(),onConnect:asynckeystone=>{awaitkeystone.createItems({User:[{name:'John Duck',email:'john@duck.com',password:'dolphins'},{name:'Barry',email:'bartduisters@bartduisters.com',password:'dolphins'},],});},});アプリケーションを起動し、管理UIにアクセスします。起動時に2人のユーザーが利用できます。
注:この例では、スタートアップごとに同じ2人のユーザーが生成されます。メールは一意である必要があるため、重複したエラーが表示されます。これを回避するには、Keystoneを開始する前にデータベースをクリアします。
次ページ https://qiita.com/bontensuzuki/items/7cd598a7075f6c970f14

