본문 바로가기
기타 프로그램

Node.js seed 데이터 넣기, 모델과 테이블 연동, 정보 조회( findAll ,findOne)

by 고체물리학 2022. 2. 28.

seed 데이터: 서버가 시작할 때 가지고 있어야 하는 데이터를 DB에 추가

                 가장 처음에 넣는 데이터

 

seed 파일 생성

- npx sequelize seed:generate --name initialMembers

 

initialMembers라는 seed파일을 생성한다

 

seeders 파일안에 js파일이 생성되는데 

'use strict';

module.exports = {
  async up (queryInterface, Sequelize) {
     await queryInterface.bulkInsert('Members', [{
      id: 1,
      name: "Zake",
      team: "Engineering",
      position: "Android Developer",
      emailAddress: "zake@google.com",
      phoneNumber: "010-xxxx-xxxx",
      admissionDate: "2021/11/14",
      birthday: "1995/04/17",
      profileImage: "profile11.png"
     },
    {
      id: 2,
      name: 'John Doe',
      team: 'enginnering',
      position:'server Developer',
      emailAddress: 'john@enginnering.com',
      phoneNumber: '010-1234-5678',
      admissionDate:'2022/02/25',
      birthday:'1990/01/01',
      profileImage: 'profileImage.png'
    }], {});
  },

  async down (queryInterface, Sequelize) {

    await queryInterface.bulkDelete('Members', null, {});

  }
};

테스트용으로 컬럼 두 개를 만든다

 

seed 데이터 삽입

- npx sequelize db:seed:all

 

모델과 데이터연동

 

models - member.js에서 id 항목 추가

안 쓰는 주석 정리

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Member extends Model {}
  Member.init({
    id: {
      allowNull: false,
      autoIncrement: true,
      primaryKey: true,
      type: DataTypes.INTEGER
    },
    name: DataTypes.STRING,
    team: DataTypes.STRING,
    postion: DataTypes.STRING,
    emailAddress: DataTypes.STRING,
    phoneNumber: DataTypes.STRING,
    addmissionDate: DataTypes.DATE,
    birthday: DataTypes.DATE,
    profileimage: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'Member',
  });
  return Member;
};

Member 클래스는 sequelize패키지의 Model을 상속받아 Member클래스는 모델이 된다

데이터베이스 있는 하나의 테이블에 대응하는 존재가 된다

Member.init({})은 모델과 테이블을 연동하는 코드

 

반응형

models - index.js 수정

const Sequelize = require('sequelize');
const config = require('../config/config.json');


const{
  username,password,database,host,dialect,
} = config.development;
const  sequelize = new Sequelize(database, username, password,{
  host,
  dialect,
});

const Member = require('./member')(sequelize,Sequelize.DataTypes);

const db = {};
db.Member = Member;
module.exports = db;

 

DB 데이터를 사용하는 js 파일에 아래 코드 추가

const db = require('./models');
const {Member} = db;

DB 객체 가져와서 멤버 모델을 꺼낸다

 

member의 DB에 team의 조건을 담은 query를 실행한다

app.get('/api/members', async (req, res) => {
    const { team } = req.query;
    if (team) {
      const teamMembers = await Member.findAll({ where: { team } }); 
      res.send(teamMembers);
    } else {
      const members = await Member.findAll();
      res.send(members);
    }
  });

api.js 전체 코드

const express = require('express');
const app = express();

const db = require('./models');
const {Member} = db;


app.use(express.json());

app.get('/hello', (req, res) => {
    res.send('<h1>Hello Express</h1>')
});

app.get('/api/members', async (req, res) => {
    const { team } = req.query;
    if (team) {
      const teamMembers = await Member.findAll({ where: { team } }); 
      res.send(teamMembers);
    } else {
      const members = await Member.findAll();
      res.send(members);
    }
  });

app.listen(3000,() => {
    console.log('listening ....'); //서버가 잘 동작하는지 확인
});

이제 extensions - REST Client로 응답이 잘 오는지 확인한다

test.http 파일을 현재 경로에 추가한다

 

GET http://localhost:3000/api/members

테이블에 담긴 정보가 전부 응답하는 걸 볼 수 있다

GET http://localhost:3000/api/members?team=enginnering

팀명이 enginnering인 쿼리를 넣어주면

id가 2번인 테이블이 출력된다

 

하나의 row만 조회할 때(findOne)

  app.get('/api/members/:id', async (req, res) => {
    const { id } = req.params;
    const member = await Member.findOne({where: {id}})
    if (member) {
      res.send(member);
    } else {
      res.status(404).send({message: 'There is no member with the id'});
    }
  });
GET http://localhost:3000/api/members/1

id가 1번인 row 조회

 

 

반응형

댓글