React | 의미 UI | GraphQL | PostgresSQL이 포함된 느슨한 클론(3부분)

이전에 Graphql 서버를 설치했습니다.오늘 우리는 데이터베이스를 시작하는 데 착수할 것이다.
나는 지난번 글의 설치 영상을 보고 Postgres 서버를 어떻게 시작하는지 보는 것을 건의합니다.그리고 명령줄을 통해 데이터베이스를 만드는 것이 아니라 Postico라는 GUI 프로그램을 사용할 것입니다.그러나 이것은 단지 나의 선호일 뿐이다.명령행 방법을 배우기 위해 동영상을 계속 볼 수 있습니다.

서버 시작 및 데이터베이스 생성


참고로 Postgres 서버가 데이터베이스와 상호작용할 때 실행되는지 확인합니다.기본적으로 이것은 데이터베이스에 제공된 것입니다.

Postico를 사용하여 데이터베이스와 상호 작용
처음 시작할 때 사용하고자 하는 데이터베이스/서버에 연결해야 합니다.
이 설명에 따라 Postgres에서 실행하는 같은 서버에 연결하기만 하면 됩니다.완료되면 Chat이라는 데이터베이스를 만듭니다.나는 아래의 "+ 데이터베이스"단추를 눌러 새로운 데이터베이스를 만들었다.

그것이 맨 위에 연결된다고 말할 때, 이것이 바로 당신이 연결한 데이터베이스입니다.
프로젝트에 우리의 데이터베이스를 설정합니다.
현재 우리는 이미 데이터베이스를 설치했는데, 지금은 프로젝트에서 이 모든 것을 설정할 때이다.루트 프로젝트 폴더의 터미널에서 명령 실행
npx sequelize init
이 명령은 기본 데이터베이스 연결 정보를 포함하는 config.json 파일을 포함하는 구성 폴더를 만듭니다. 이전에 만든 데이터베이스와 일치하도록 변경해야 합니다.얘가 이렇게 보일 거예요.
/** config/config.js */
{
  "development": {
    "username": "ajeas",
    "password": "",
    "database": "chat",
    "host": "127.0.0.1",
    "dialect": "postgres"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "postgres"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "postgres"
  }
}
'사용자 이름'은 당신의 이름입니다. 기본 비밀번호는 빈 문자열입니다.'데이터베이스'는 채팅 기록,'사투리'Postgres (어떤 데이터베이스를 사용해야 하는지 알려주십시오. 원한다면 MySQL 같은 다른 데이터베이스를 넣을 수 있습니다. 그러나, 우리는 Postgres 를 사용하고 있습니다) 잠시 테스트와 생산을 소홀히 합니다.
Sequelize를 사용하여 모델 생성(테이블)
데이터베이스 정보를 설정한 후에 명령행을 통해 우리의 첫 번째 모델을 만들 때가 되었다.이 코드를 실행하여 사용자 모델을 생성합니다(등록 사용자를 나타냅니다).
npx sequelize model:generate --name User --attributes username:string,email:string,password:string
이것은 우리가 지정해야 할 데이터 형식의 사용자 이름, 전자메일, 암호 필드 (열) 를 포함하는 사용자 모델 (표) 을 만들 것입니다. 이것이 바로 우리가 마지막에 :string 을 추가한 이유입니다.너의 모형은 아마 이렇게 될 것이다
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate() {
      // define association here

    }
  }
  User.init(
    {
      username: DataTypes.STRING,
      email: DataTypes.STRING,
      password: DataTypes.STRING
    },
    {
      sequelize,
      modelName: "User"
    }
  );
  return User;
};
데이터베이스에 있는 테이블 구조를 표시하는migrations 폴더와 xxxxxxxx-create-user.js 파일을 만들 것입니다.모델을 만들 때마다migrations 폴더에 이전 파일을 추가합니다.(이 시리즈에서 이 폴더를 사용하지 않기 때문에 이 폴더를 무시할 수 있는 피드 폴더도 만들었습니다.)
다른 시스템에 들어가기 전에 서버를 시작할 때 데이터베이스에 연결합시다.이것 추가server.js 파일
/** add this */
const { sequelize } = require("./models");

server.listen(4000, () => {
  console.log(`🚀 Server ready at port 4000`);
  // Connecting to Database

/** add this */
  sequelize
    .authenticate()
    .then(() => {
      console.log("database connected");
    })
    .catch(err => console.log(err));
});
이것은 sequelize와 우리의 config.js 파일을 사용하여 우리의 데이터베이스에 연결합니다.서버 다시 시작 (npm run dev), 터미널에서 볼 수 있을 것 같습니다.

이제 우리가 필요로 하는 나머지 모델을 만듭니다.이전과 같은 명령을 실행하여 팀, 채널, 메시지 모델을 만듭니다
참조용: 이러한 명령은 모델 폴더에서 파일을 생성합니다.
npx sequelize model:generate --name Team --attributes name:string
npx sequelize model:generate --name Channel --attributes name:string,public:boolean
npx sequelize model:generate --name Message --attributes text:string
모든 모델은 사용자 모델 이미지와 비슷해야 합니다.모델을 데이터베이스로 마이그레이션하기 전에우리는 그들 사이에서 관계를 맺어야 한다.
모델 관계식(연관)belongsToManybelongsTo 관계를 사용하려면 각 모델 파일에서 수동으로 이 작업을 수행해야 합니다.
"한 사용자가 느슨한 상태에 있는 여러 그룹에 속할 수 있습니다."이것은 그들이 다른 member라는 테이블을 통해 연결할 수 있도록 합니다. 이 테이블은 외부 키를 member 테이블에 추가합니다.(참고로 저는 관계 데이터베이스와 관계에 익숙하지 않습니다. 그래서 제가 이해할 수 있는 가장 좋은 방법으로 설명합니다.)
/** User model */
static associate({ Team }) {
  // define association here
  this.belongsToMany(Team, {
     through: "member",
     foreignKey: "userId"
  });
}
"한 팀은 여러 사용자에 속할 수 있다. 특정한 사용자에 속한다."는 서로 다른 키로 같은 구성원 표에 연결된다.longsTo는 다른 테이블을 만들지 않습니다. 팀에 키를 추가할 뿐입니다.외부 키 소유자는 팀을 소유한 사용자(모델)의 ID가 됩니다.
/** Team model */
static associate({ User }) {
   // define association here
   this.belongsToMany(User, { through: "member", foreignKey: "teamId"});
   this.belongsTo(User, { foreignKey: "owner" });
}
"메시지는 하나의 채널에 속하고, 그것은 하나의 사용자에 속한다."메시지에 두 개의 키를 추가했다.외키channelId는 메시지가 속한 채널의 ID가 되고, userId 외키는 메시지를 만든 사용자(모델)의 ID가 됩니다.
/** Message model */
static associate({ Channel, User }) {
   // define association here
   this.belongsTo(Channel, { foreignKey: "channelId" });
   this.belongsTo(User, { foreignKey: "userId" });
}
마지막으로 우리의 채널 모델."한 채널은 하나의 팀에 속합니다."왜냐하면 우리는 팀이 없는 채널을 만들 수 없기 때문입니다. teamId 외부 키는 이 채널이 속한 팀(모델)의 "ID"입니다.
/** Channel model */
static associate({ Team }) {
   // define association here
   this.belongsTo(Team, { foreignKey: "teamId" });
}
이제 데이터베이스로 옮겨 같은 구조를 갖도록 하겠습니다.마이그레이션 명령을 실행합니다.
npx sequelize db:migrate
만약 모든 것이 순조롭다면, 터미널에서 xxxxxxxxxxx-create-user.js 다른 이전 파일과 함께 이전하는 메시지를 볼 수 있을 것입니다.
반드시 당신의 채팅 데이터베이스에 연결하고 Postico에 서명하십시오. 현재 키가 추가된 모든 시계를 보셔야 합니다.

지금까지 폴더 구조는 다음과 같습니다.

이 모든 것은 이 사람을 위해서입니다. 만약 당신이 이 과정에서 어떤 문제가 있다면, 이것은 매우 많습니다. 나는 기꺼이 당신을 도울 것입니다. 만약 당신이 끼었다면.건배!

좋은 웹페이지 즐겨찾기