0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Keystonejs Tutorials #3/Seeding data

Last updated at Posted at 2020-05-04

次ページ 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

スクリーンショット 2020-05-03 17.44.02.png

スクリーンショット 2020-05-03 17.42.43.png

登録が確認できました

###アイテムを作成する
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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?