次ページ https://qiita.com/bontensuzuki/items/7cd598a7075f6c970f14
#Seeding data
Keystonejsのtutorialsから学んでいきます。(ほとんど機械翻訳です)
https://www.keystonejs.com/tutorials/initial-data
このガイドでは、createItemsメソッドを使用してユーザーリストを作成し、それに初期データを追加する方法を示します。このプロセスはSeedingとも呼ばれます。
注:前の章では、コードは個別のファイルに分割されましたが、実際のコードベースではこれが推奨されますが、この部分では、明確にするためにすべてが1つのファイルに入れられています。
##リスト設定
###パッケージをインストールする
この章では、前の章とは異なるユーザースキーマを使用し、Todoリストの代わりに投稿リストを使用します。新しいプロジェクトから始めて、空のデータベースから始める(前の章のデータを削除する)のが最善です。また、次のパッケージがすべてインストールされていることを確認してください。
mkdir new-project3
cd new-project3
yarn init
yarn add @keystonejs/keystone
yarn add @keystonejs/adapter-mongoose
yarn add @keystonejs/app-graphql
yarn add @keystonejs/fields
yarn add @keystonejs/app-admin-ui
yarn add @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');
const keystone = new Keystone({
name: 'example-project',
adapter: new MongooseAdapter(),
});
keystone.createList('User', {
fields: {
name: { type: Text },
email: {
type: Text,
isUnique: true,
},
isAdmin: { type: Checkbox },
password: {
type: Password,
},
},
});
const authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: 'User',
});
module.exports = {
keystone,
apps: [new GraphQLApp(), new AdminUIApp({ 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が含まれているため、上記のコードでは、生成する必要がある各ユーザーに対して同じ電子メールを使用することはできません。
データベース接続時にデータをシードする方法の例:
const keystone = new Keystone({
name: 'New Project',
adapter: new MongooseAdapter(),
onConnect: async keystone => {
await keystone.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