57日目(03-02-2021)


mysqlモジュールを使用してデータベースを要求する場合は、クエリー文を記述する必要があります.クエリ文...直感的だが、長く、正確性も低い.また、クエリー文に慣れていない人にとっては、ノード環境でデータベースを使用するのは難しい場合があります.
この場合、代替可能なモジュールがあります.それがSequelizeこのモジュールは、コードの作成に詳しい人にとって、クエリー文よりも役立ちます.
クエリー文と同様に直感的で、クエリー文をより簡単な形で置き換えることができます.また、Sequelizeをより使いやすくするツールがあります.Sequelize-cliという名前のツールにデータを移行します(移行/移行とは、モードの変更に伴って移行されるデータのことです).助けやすい.
これを使用して、データベースを直接構築します.

1.事前準備


適当にディレクトリを探して始めてください.npm initで梱包します.jsonファイルを作成します.
次に、SequelizeとSequelize-cliをインストールします.
$ npm install sequelize
$ npm install sequelize-cli
cliにより、必要な基本ファイルを簡単にインストールできます.
$ npx sequelize-cli init
上記のコマンドを使用すると、作業するディレクトリにconfig、migrations、models、seedersディレクトリが表示されます.
次にmysqlで練習するデータベースを作成します.testDBで作りました.

2.接続の設定


config/config.jsonファイルを表示します.
{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}
以上のジェイソン形式のデータが表示され、上のオブジェクト内の3つの属性の開発、テスト、生成が表示されます.状況に応じてmodel/indexを使用できますjsファイルを表示すると、環境変数を個別に指定しない場合、デフォルトで開発が行われます.
自分の情報を入れる.

3.モデル/移行


モデルはモデルのようです.以前はsequelizeを使ってコードを1つずつ書くべきでしたが、cliを使って簡単に書くことができます.
まずはmodel/indexjsファイルでは、接続の役割を果たすだけでなく、モデルはdbという名前のオブジェクトに属性として挿入して管理できます.方式は、modelsディレクトリ内の他のmodelファイルを1つずつ読み取り、記憶することです.
では、今モデルを作りましょう.簡単にtestというモデルを作ります.
$ npx sequelize-cli model:generate --name test --attributes name:string,age:integer
上記のコマンドを使用すると、モデルを簡単に直感的に作成できます.「name」の横にあるモデル名--attributeで列とデータ型(integer=>int,string=>varchar(255))を指定します.上記のコマンドを実行すると、2つのファイルmigrations/2021 xxx-create-testが生成されます.js, models/test.js. まず、2つのファイルの内容を見ると、2つのファイルの内容が似ていることがわかります.
ただし、modelsのファイルはmysqlを使用すると引き続き使用され、migrationsのファイルはテーブルの作成時に一度使用されます.簡単に言えば、migrationsの役割はテーブルの外観を作成するだけで、データベースの参照または更新は実際にモデルで発生します.モデルを作成すると、自動的に複数の移行(test)に移行します.これはテーブル名です.
migrationsファイルは必要ないように見えますが、記録を保持し、コマンドを使用して変更したデータを前の状態に復元するのに非常に役立ちます.
このように作成したモードを移行してみましょう.
$ npx sequelize-cli db:migrate
(上記コマンドを実行する前にmysql 2モジュールをインストールします.)

また、データベースを直接表示すると、テーブルが追加される場合があります.参考までに、SequelizeMetaは移行を記録するテーブルです.
この過程でミスがあったら、
$npx sequelize-cli db:migrate:undo
上記のコマンドを使用して、前の状態に戻すことができます.

4.サーバを使用してデータを追加および照会します。


このプロセスを完了するには、サーバについて少しだけ理解する必要があります.まず、expressを使用して簡単なサーバを構築しました.
const express = require('express');
const app = express();
const port = 3000;
const db = require('./models');
const jsonParser = require('body-parser'); // json형식을 변환하는 미들웨어.
const test = db.test

app.use(jsonParser.json());
app.post('/test', (req, res) => {
  const {name, age} = req.body;
  test.create({name: name, age: age})
  .then(data => {
    res.status(201).send(data);
  })
  .catch(err => {res.status(400).send('bad-request')})
})
上述したように、dbはすべてのモデルをオブジェクト化管理する.なので、勝手にコンソールで撮影すると、対象の中に模型があることを直接確認できます.次にcreateメソッドを用いてINSERT INTOなどの機能を実現することができる.

Postmanで送ると、

登録されている姿がよく見えます.ちなみにメソッドはpromiseを返し、非同期操作にも柔軟です.
// 생략
app.get('/test/:id', async (req, res) => {
  const id = req.params.id;
  try {
    const data = await test.findAll({where: {id: id}});
    if (data.length === 0) {
      throw new Error()
    }
    res.status(200).send(data);
  } catch (e) {
    res.status(404).send('NOT FOUND!');
  }
})
プロセスを返す観点からasync/aiatも使用できます.注目すべきは、findAllはSELECT FROMコマンドと同じ役割を果たす.内部のパラメータを使用して条件を作成できます.空の場合、クエリーされます.

正式な書類には良い説明があるので参考にしたほうがいいです.
ベンジャスプリントは公式文書の破壊者だ.コデステッツが提供した情報は深刻に書かれています...冒険しているような気がします.そこのdbオブジェクトを理解して使用するまでに3時間ほどかかりました.コンソールを撮ったり、コンソールを検索したり、不思議なコードを書いたりしました.そして徐々に答えが出てきた.
テストはすべて順調に合格しましたが、これは本当に正しいですか?思ったことが消せない.しかし、私の問題解決能力がずいぶん向上したことを実感しました.
今回のプリントからたくさんもらえたようです.expressのルータは使い慣れています.CodeStates最高!