Node.js

[ Node.js ] 04. crud , HTTP method, MySQL 연동

변쌤(이젠강남) 2024. 4. 30. 16:33
반응형

CRUD란

 

CRUD는 소프트웨어 개발에서 기본적인 데이터 조작 작업을 설명하는 약어로, Create, Read, Update, Delete의 첫 글자를 따서 만든 용어입니다. 이 네 가지 작업은 대부분의 데이터베이스 애플리케이션에서 필수적인 기능으로, 데이터를 생성하고, 조회하고, 수정하고, 삭제하는 작업을 의미합니다.

 

 

CRUD (서버의 기본)

  • POST : CREATE - 요청된 자원을 생성
  • GET : READ - 요청된 자원을 읽음
  • PUT : UPDATE - 요청된 자원을 수정
  • DELETE : DELETE - 요청된 자원을 삭제

 

 

  • Create: POST - 새로운 리소스 생성
  • Read: GET - 기존 리소스 조회
  • Update: PUT (전체 업데이트) 또는 PATCH (부분 업데이트) - 기존 리소스 수정
  • Delete: DELETE - 기존 리소스 삭제

 

 

 

Create (생성)

새로운 데이터를 생성하여 데이터베이스에 추가하는 작업

 

Create (생성)

  • HTTP 메서드: POST
  • 설명: 새로운 리소스를 생성할 때 사용됩니다. 예를 들어, 새로운 사용자를 등록하거나, 새 항목을 데이터베이스에 추가할 때 POST 메서드를 사용합니다.

Read (읽기)

  • HTTP 메서드: GET
  • 설명: 서버에서 데이터를 조회할 때 사용됩니다. 데이터베이스에서 항목을 가져오거나, 특정 리소스의 내용을 읽을 때 GET 메서드를 사용합니다.

Update (수정)

  • HTTP 메서드: PUT 또는 PATCH
  • 설명: 기존 리소스를 수정할 때 사용됩니다. PUT은 전체 리소스를 대체할 때 사용되며, PATCH는 리소스의 일부만 업데이트할 때 사용됩니다.

Delete (삭제)

  • HTTP 메서드: DELETE
  • 설명: 기존 리소스를 삭제할 때 사용됩니다. 데이터베이스에서 특정 항목을 삭제하거나, 서버에서 리소스를 제거할 때 DELETE 메서드를 사용합니다.

 

# HTTP method

 

HTTP 메서드는 클라이언트가 서버와 통신할 때 사용되는 요청 방법을 정의합니다. 각 메서드는 서버에서 특정 작업을 수행하도록 지시하며, 주로 RESTful API 설계에서 사용됩니다. 주요 HTTP 메서드는 다음과 같습니다:

 

1. GET

  • 설명: 서버에서 리소스를 요청하고 가져올 때 사용됩니다. 서버는 요청된 리소스를 반환합니다.
  • 용도: 데이터를 조회할 때 사용됩니다.
  • 특징:
    • 서버의 상태나 데이터를 변경하지 않습니다.
    • 요청 데이터는 URL에 쿼리 파라미터로 포함될 수 있습니다.
    • 캐시될 수 있으며, 브라우저 기록에 저장됩니다.

2. POST

  • 설명: 서버에 데이터를 전송하고, 서버에서 새로운 리소스를 생성할 때 사용됩니다.
  • 용도: 새 데이터를 서버에 제출하거나, 서버의 상태를 변경하는 작업에 사용됩니다.
  • 특징:
    • 요청 데이터는 요청 본문(body)에 포함됩니다.
    • 주로 데이터를 생성하는 작업에 사용됩니다.
    • 캐시되지 않으며, URL에 요청 데이터가 포함되지 않기 때문에 보안상 유리합니다.

3. PUT

  • 설명: 서버에 데이터를 전송하여 지정된 리소스를 업데이트할 때 사용됩니다. 주로 기존 리소스를 완전히 대체합니다.
  • 용도: 리소스를 업데이트하거나 생성할 때 사용됩니다.
  • 특징:
    • 요청 데이터는 요청 본문에 포함됩니다.
    • 주로 전체 리소스를 대체하는 작업에 사용됩니다.
    • POST와 달리, PUT은 동일한 요청을 여러 번 보내도 동일한 결과를 보장하는 멱등성(idempotency)이 있습니다.

4. DELETE

  • 설명: 서버에서 특정 리소스를 삭제할 때 사용됩니다.
  • 용도: 데이터를 삭제하는 작업에 사용됩니다.
  • 특징:
    • 주로 서버의 상태를 변경합니다.
    • 멱등성 특징을 가지며, 동일한 요청을 여러 번 보내도 동일한 결과(리소스가 삭제됨)를 보장합니다.

5. PATCH

  • 설명: 서버에서 기존 리소스의 일부를 수정할 때 사용됩니다.
  • 용도: 리소스의 일부분만 업데이트할 때 사용됩니다.
  • 특징:
    • PUT과 달리 전체 리소스를 대체하지 않고, 지정된 부분만 변경합니다.
    • 멱등성을 보장하지 않으며, 여러 번 동일 요청을 보냈을 때 항상 동일한 결과가 나타나지 않을 수 있습니다.

6. HEAD

  • 설명: GET 요청과 유사하지만, 서버는 응답 본문을 반환하지 않고, HTTP 헤더만 반환합니다.
  • 용도: 리소스가 존재하는지 확인하거나, 리소스의 메타데이터(예: 수정 날짜)를 확인할 때 사용됩니다.
  • 특징:
    • 서버의 데이터를 변경하지 않으며, 응답 본문을 반환하지 않으므로 네트워크 오버헤드가 적습니다.

7. OPTIONS

  • 설명: 특정 URL에서 사용할 수 있는 HTTP 메서드를 확인할 때 사용됩니다.
  • 용도: 서버가 지원하는 메서드를 확인하거나, CORS(교차 출처 리소스 공유) 요청 전에 사전 검사를 수행할 때 사용됩니다.
  • 특징:
    • 서버의 상태나 데이터를 변경하지 않습니다.

8. CONNECT

  • 설명: 클라이언트와 서버 간의 터널링을 설정할 때 사용됩니다.
  • 용도: 주로 HTTPS 프로토콜에서 SSL 터널링을 설정하는 데 사용됩니다.
  • 특징:
    • 클라이언트와 서버 간의 TCP 연결을 통해 직접 통신할 수 있는 터널을 생성합니다.

9. TRACE

  • 설명: 클라이언트가 서버로부터 받은 요청의 경로를 추적할 때 사용됩니다.
  • 용도: 진단 및 디버깅 목적으로 사용됩니다.
  • 특징:
    • 요청의 경로를 그대로 반환하며, 중간 서버나 프록시를 포함한 전체 경로를 확인할 수 있습니다.
    • 보안 문제로 인해 일반적으로 비활성화되어 있습니다.

 


 

 

 

 

1. get 메서드 : 서버에서 데이터를 요청할 때 사용

 

app.get('/users', (req, res) => {
  // 예시: 사용자 목록을 반환
  const users = [
    { id: 1, name: '인천' },
    { id: 2, name: '이젠컴퓨터' },
  ];
  res.json(users);
});

 

 

2. post 메서드  : 서버에 데이터를 전송하여 새로운 리소스를 생성할 때 사용

 

app.post('/users', (req, res) => {
  
  // 새로운 사용자 추가
  const newUser = { id: 3, name: req.body.name };
  
  // 실제로는 데이터베이스에 저장하는 과정이 있을 수 있음
  res.status(201).json(newUser);
  
});

 

 

3. PUT 메서드 : 서버의 기존 리소스를 업데이트할 때 사용됩니다. 주로 전체 리소스를 대체

 

app.put('/users/:id', (req, res) => {
  
  //사용자의 전체 정보를 업데이트
  const updatedUser = { id: req.params.id, name: req.body.name };
  
  // 실제로는 데이터베이스에서 해당 사용자의 정보를 업데이트
  res.json(updatedUser);
});

 

 

4. DELETE 메서드 : 서버의 리소스를 삭제할 때 사용

app.delete('/users/:id', (req, res) => {
  // 사용자를 삭제
  // 실제로는 데이터베이스에서 해당 사용자를 삭제하는 로직이 필요함
  res.status(204).send(); // 204 No Content 응답
});

 

 

5. PATCH 메서드 : 서버에서 기존 리소스의 일부를 수정할 때 사용됩니다.

 

 

app.patch('/users/:id', (req, res) => {
  
  // 사용자의 이름만 업데이트
  const partialUpdate = { name: req.body.name };
  // 실제로는 데이터베이스에서 해당 부분만 업데이트
  res.json({ id: req.params.id, ...partialUpdate });
  
});

 

 

6. HEAD 메서드 : GET 요청과 유사하지만, 서버는 응답 본문을 반환하지 않고, HTTP 헤더만 반환

특정 사용자가 존재하는지 확인하는 API

 

app.head('/users/:id', (req, res) => {
  //사용자가 존재하는지 확인
  // 실제로는 데이터베이스에서 해당 사용자가 존재하는지 체크
  res.status(200).send(); // 사용자가 존재한다는 응답
});

 

 

7. OPTIONS 메서드  : 특정 URL에서 사용할 수 있는 HTTP 메서드를 확인할 때 사용

/users 엔드포인트에서 사용할 수 있는 메서드 확인

 

app.options('/users', (req, res) => {
  res.set('Allow', 'GET, POST, OPTIONS');
  res.send();
});

 

 

 


 

 

 

 

# Create (생성)

HTTP 메서드: POST : 로운 리소스를 생성할 때 사용 

app.post('/users', (req, res) => {
  // 새로운 사용자 생성 로직
  res.status(201).json({ message: '메세지' });
});

 

 

# Read (읽기)

HTTP 메서드: GET : 서버에서 데이터를 조회할 때 사용

 

app.get('/users', (req, res) => {
  // 사용자 목록 조회 로직
  res.json(users);
});

app.get('/users/:id', (req, res) => {
  // 특정 사용자 조회 로직
  res.json(user);
});

 

 

# Update (수정)

HTTP 메서드: PUT 또는 PATCH 

기존 리소스를 수정할 때 사용

PUT은 전체 리소스를 대체할 때 사용되며, PATCH는 리소스의 일부만 업데이트할 때 사용

 

PUT

app.put('/users/:id', (req, res) => {
  // 전체 사용자 정보 업데이트 로직
  res.json({ message: '메세지1' });
});

 

 

PATCH

app.patch('/users/:id', (req, res) => {
  // 사용자 정보 일부 업데이트 로직
  res.json({ message: '메세지2' });
});

 

 

# Delete (삭제)

HTTP 메서드: DELETE

기존 리소스를 삭제할 때 사용됩니다. 데이터베이스에서 특정 항목을 삭제하거나, 서버에서 리소스를 제거할 때 DELETE 메서드를 사용

app.delete('/users/:id', (req, res) => {
  // 사용자 삭제 로직
  res.json({ message: '메세지1' });
});

 

* 정리 

 

  • Create: POST - 새로운 리소스 생성
  • Read: GET - 기존 리소스 조회
  • Update: PUT (전체 업데이트) 또는 PATCH (부분 업데이트) - 기존 리소스 수정
  • Delete: DELETE - 기존 리소스 삭제

 

 

 

# 미들웨어(Middleware)란?

 

미들웨어는 Express.js에서 요청(request)과 응답(response) 사이에 동작하는 함수입니다. 미들웨어는 HTTP 요청을 처리하는 과정에서 특정 작업을 수행하거나, 요청을 수정하고, 로그를 기록하거나, 에러를 처리하는 등의 다양한 역할을 할 수 있습니다. 미들웨어는 여러 개를 체인으로 연결할 수 있으며, 각 미들웨어는 다음 미들웨어로 요청을 전달하거나 요청 처리를 종료할 수 있습니다.

 

미들웨어의 주요 특징

  • 요청(request) 객체를 수정할 수 있습니다.
  • 응답(response) 객체를 수정할 수 있습니다.
  • 요청을 종료하지 않고 다음 미들웨어로 제어를 넘길 수 있습니다.
  • 요청-응답 주기 동안의 작업을 수행할 수 있습니다.

 

미들웨어의 종류

 

# 애플리케이션 레벨 미들웨어

  • 애플리케이션 전체 또는 특정 경로에 적용되는 미들웨어입니다.
  • 모든 경로에 적용하거나, 특정 경로에만 적용할 수 있습니다.
const express = require('express');
const app = express();

// 모든 경로에 적용되는 미들웨어
app.use((req, res, next) => {
  console.log('Request Type:', req.method);
  next(); // 다음 미들웨어로 제어 전달
});

// 특정 경로에만 적용되는 미들웨어
app.use('/user/:id', (req, res, next) => {
  console.log('Request URL:', req.originalUrl);
  next();
});

 

 

#  라우터 레벨 미들웨어

  • 특정 라우터 객체에만 적용되는 미들웨어입니다.
  • 라우터와 관련된 작업만 처리합니다.
const express = require('express');
const app = express();
const router = express.Router();

// 라우터에 적용되는 미들웨어
router.use((req, res, next) => {
  console.log('Time:', Date.now());
  next();
});

router.get('/user/:id', (req, res) => {
  res.send('User Info');
});

app.use('/api', router);

 

 

#  내장 미들웨어

  • Express.js에서 기본적으로 제공하는 미들웨어입니다.
  • Express 버전 4.x부터는 내장된 미들웨어들이 따로 패키지로 분리되었으므로 별도로 설치해야 할 수 있습니다.

 

  • express.static: 정적 파일을 제공하기 위한 미들웨어.
  • express.json: JSON 요청 본문을 파싱하기 위한 미들웨어.
  • express.urlencoded: URL-encoded 데이터를 파싱하기 위한 미들웨어.
const express = require('express');
const app = express();

// JSON 요청 본문을 파싱
app.use(express.json());

// URL-encoded 데이터 파싱
app.use(express.urlencoded({ extended: true }));

// 정적 파일 제공
app.use(express.static('public'));

 

 

 

#  서드파티 미들웨어

  • 커뮤니티에서 제공하는 외부 미들웨어입니다.
  • 다양한 기능을 쉽게 구현할 수 있도록 해줍니다.

 

 

  • morgan: HTTP 요청 로깅 미들웨어.
  • cors: 교차 출처 리소스 공유(CORS)를 지원하는 미들웨어.
  • cookie-parser: 쿠키를 쉽게 파싱할 수 있게 해주는 미들웨어.
const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const app = express();

// HTTP 요청 로깅
app.use(morgan('combined'));

// CORS 허용
app.use(cors());

// 쿠키 파싱
app.use(cookieParser());

 

 

 

#  에러 처리 미들웨어

  • 요청 처리 중 발생한 에러를 처리하는 미들웨어입니다.
  • 일반 미들웨어와 달리 err 객체를 첫 번째 인자로 받습니다.
const express = require('express');
const app = express();

// 에러 처리 미들웨어
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

 

 


axios

HTTP 요청을 보낼 때 사용하는 JavaScript 라이브러리로, 다양한 속성과 메서드 옵션을 제공합니다.

주로 axios 인스턴스를 생성하거나 axios.get, axios.post와 같은 메서드를 호출할 때 옵션을 설정할 수 있습니다.

  • axios.get(url, config): GET 요청을 보낼 때 사용합니다.
  • axios.post(url, data, config): POST 요청을 보낼 때 사용하며, data를 포함합니다.
  • axios.put(url, data, config): PUT 요청을 보내고 데이터를 업데이트할 때 사용합니다.
  • axios.delete(url, config): DELETE 요청을 보낼 때 사용합니다.
  • axios.patch(url, data, config): PATCH 요청을 통해 일부 데이터를 수정할 때 사용합니다.
  • axios.request(config): 메서드를 포함한 모든 설정을 수동으로 지정해 요청을 보낼 수 있는 기본 메서드입니다.

 

config 객체

const config = {
    method: 'post',
    url: '/user',
    baseURL: 'https://api.example.com',
    headers: { 'Content-Type': 'application/json' },
    data: { name: 'Alice', age: 25 },
    timeout: 3000,
    responseType: 'json',
    withCredentials: true,
};

axios(config)
    .then(response => console.log(response))
    .catch(error => console.error(error));

 


MVC 패턴 ( Model-View-Controller )

 

MVC 패턴은 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나로, 특히 웹 애플리케이션에서 많이 사용됩니다. 이 패턴은 애플리케이션의 비즈니스 로직과 사용자 인터페이스를 분리하여 개발 효율성을 높이고, 유지보수를 용이하게 만드는 목적을 가지고 있습니다. 각 구성 요소는 서로 분리되어 독립적으로 동작하지만, 긴밀하게 협력하여 애플리케이션의 기능을 구현합니다.

MVC 패턴의 구성 요소:

  1. Model (모델):
    • 애플리케이션의 데이터와 비즈니스 로직을 관리하는 부분입니다.
    • 데이터베이스와 상호작용하고, 데이터를 가져오거나 저장하는 역할을 합니다.
    • 사용자와 직접적으로 상호작용하지 않으며, 데이터를 저장하고 불러오는 것과 관련된 모든 것을 담당합니다.
  2. View (뷰):
    • 사용자에게 보여지는 화면입니다.
    • 사용자가 볼 수 있는 UI를 구성하고, 모델의 데이터를 사용자에게 적절한 형태로 출력합니다.
    • 뷰는 데이터의 표현과 관련된 모든 것을 담당하지만, 데이터를 수정하거나 처리하지는 않습니다.
  3. Controller (컨트롤러):
    • 사용자의 입력을 받아 처리하는 중재자 역할을 합니다.
    • 모델과 뷰를 연결하는 역할을 하며, 사용자로부터 받은 요청을 모델에 전달하고, 그 결과를 다시 뷰에 전달해 화면에 출력합니다.
    • 사용자의 명령이나 입력 이벤트(버튼 클릭 등)를 모델과 뷰에 전달하여 애플리케이션이 작동하도록 만듭니다.

 

 

 

 

 

 

 

 

model.js 

데이터 부분

 

controller.js

const getxxx = (req, res) => {
     
};


module.exports = {
    getxxx
};

 

 

router.js

const express = require('express');
const xxRouter  = express.Router();

xxRouter.get()
xxRouter.delete()
xxRouter.post()
xxRouter.put()


module.exports = xxRouter;

 

# express.Router

Express.js에서 제공하는 기능으로, 여러 개의 경로(route)를 모듈화하고 관리하기 위한 미들웨어입니다. 즉, 애플리케이션의 경로 처리 로직을 모듈 단위로 분리해서 관리할 수 있게 해줍니다.

express.Router를 사용하면 메인 애플리케이션의 크기가 커질 때, 경로 설정을 더 체계적으로 하고 코드 가독성을 높일 수 있습니다.

 

 

index.js

const xxRouter = require('./routes/xxxx');

app.use('/xxx', xxRouter)

 

 

 

 


 

npm install mysql2
npm install dotenv

 

 

 

 

project/
├── .env               # 환경 변수 파일 (루트 디렉토리에 위치)
├── index.js           # 서버 시작 파일
└── src/
    ├── controllers/   # 컨트롤러 파일
    ├── models/        # 모델 파일
    └── router/        # 라우터 파일

 

index.js

require('dotenv').config(); // 루트에 있는 .env 파일 불러오기
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
    console.log(`서버 실행 :${PORT}`);
});

 

 

mysql 

CREATE DATABASE myworks;
USE myworks;


CREATE TABLE todos (
    id INT  PRIMARY KEY AUTO_INCREMENT,
    text VARCHAR(255) NOT NULL,
    isChk BOOLEAN DEFAULT FALSE
);

DROP TABLE todos;

INSERT INTO todos (text, isChk) 
VALUES 
('운동하기', FALSE),
('친구만나기', FALSE),
('프로젝트만들기', FALSE),
('점심시간', FALSE) ;

select * from todos;

 

 

env

# MySQL 연결 정보
DB_HOST=localhost          # 데이터베이스 호스트
DB_USER=your_username      # MySQL 사용자 이름
DB_PASSWORD=your_password  # MySQL 비밀번호
DB_NAME=myworks            # 사용하려는 데이터베이스 이름
DB_PORT=3306               # MySQL 포트 (일반적으로 3306)

# 서버 포트
PORT=3000                  # Express 서버 포트

 

models => index.js 

const mysql = require('mysql2');

const db = mysql.createConnection({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
    port: process.env.DB_PORT,
});

module.exports = db;

 

 

 

 

index.js 

require('dotenv').config();
const port = process.env.PORT || 3000;

 

 

 

 

쿼리문

 

 

  • 조회: SELECT * FROM todos WHERE id = ?
  • 삭제: DELETE FROM todos WHERE id = ?
  • 추가: INSERT INTO todos (text, isChk) VALUES (?, ?)
  • 수정: UPDATE todos SET isChk = ? WHERE id = ?

 

 

db.query(쿼리문, [전달값], (에러, 결과) => {
    // 쿼리 실행 후 콜백 함수
});

 

조회

const sql = 'SELECT * FROM todos';

db.query(sql, (err, result) => {
    if (err) {
        console.error('Error executing query:', err);
        return;
    }
    console.log('All todos:', result);  // 전체 조회 결과 출력
});

 

번호조회

const id = 1;  // 예시 id 값
const sql = 'SELECT * FROM todos WHERE id = ?';

db.query(sql, [id], (err, result) => {
    if (err) {
        console.error('Error executing query:', err);
        return;
    }
    console.log('Query result:', result);  // 조회 결과 출력
});

 

  • sql: SELECT * FROM todos WHERE id = ?
  • 전달값: [id]
  • 결과: result에 조회된 항목이 배열 형식으로 저장됩니다.

# 삭제 

const id = 1;  // 삭제할 id 값
const sql = 'DELETE FROM todos WHERE id = ?';

db.query(sql, [id], (err, result) => {
    if (err) {
        console.error('Error executing delete:', err);
        return;
    }
    console.log('Delete result:', result);  // 삭제 결과 출력
});

 

  • sql: DELETE FROM todos WHERE id = ?
  • 전달값: [id]
  • 결과: result의 affectedRows 속성이 1이면 삭제가 성공적으로 수행됨을 의미합니다.

# 추가

const text = '새로운 할 일';
const isChk = false;
const sql = 'INSERT INTO todos (text, isChk) VALUES (?, ?)';

db.query(sql, [text, isChk], (err, result) => {
    if (err) {
        console.error('Error executing insert:', err);
        return;
    }
    console.log('Insert result:', result);  // 추가 결과 출력
});

 

 

 

  • sql: INSERT INTO todos (text, isChk) VALUES (?, ?)
  • 전달값: [text, isChk]
  • 결과: result의 insertId 속성에 삽입된 항목의 id가 저장됩니다.

# 수정

const id = 1;  // 수정할 항목의 id
const isChk = true;  // 새로운 isChk 상태 값
const sql = 'UPDATE todos SET isChk = ? WHERE id = ?';

db.query(sql, [isChk, id], (err, result) => {
    if (err) {
        console.error('Error executing update:', err);
        return;
    }
    console.log('Update result:', result);  // 수정 결과 출력
});

 

 

  • sql: UPDATE todos SET isChk = ? WHERE id = ?
  • 전달값: [isChk, id]
  • 결과: result의 changedRows 속성이 1이면 수정이 성공적으로 수행됨을 의미합니다.

 

 

 

result 확인

ResultSetHeader 객체입니다. 이 객체는 데이터베이스에서 DELETE 쿼리를 실행한 후의 메타데이터를 포함하며, 필드 설명

ResultSetHeader {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  info: '',
  serverStatus: 2,
  warningStatus: 0,
  changedRows: 0
}

 

 

  • fieldCount: DELETE 쿼리에서는 반환되는 데이터가 없기 때문에, 항상 0입니다.
  • affectedRows: 영향을 받은 행(row)의 개수를 나타냅니다. 여기서는 1이므로, 해당 id에 해당하는 todo가 성공적으로 삭제되었음을 의미합니다. 삭제된 행이 없으면 0이 됩니다.
  • insertId: INSERT 쿼리가 아닌 경우 0입니다. DELETE 쿼리에서는 의미가 없습니다.
  • info: 쿼리에 대한 추가 정보가 들어갑니다. DELETE 쿼리에서는 일반적으로 빈 문자열입니다.
  • serverStatus: 서버의 상태를 나타내는 값으로, 일반적으로 2는 서버가 실행 중임을 의미합니다.
  • warningStatus: 경고 상태를 나타냅니다. 0은 경고가 없음을 의미합니다.
  • changedRows: DELETE 쿼리에서는 항상 0입니다. UPDATE 쿼리에서 변경된 행의 개수를 나타냅니다.

 

 

insertId 는 새로운 레코드가 삽입되었을 때 MySQL이 자동으로 생성한 고유 ID를 반환합니다. 주로 INSERT 쿼리에서 유효하며, 새로운 행이 추가되면 그 행의 id 값을 알려줍니다. DELETE나 UPDATE 쿼리에서는 의미가 없으며, 항상 0으로 반환됩니다.

 

const sql = `INSERT INTO todos (title, isChk) VALUES (?, ?)`;
db.query(sql, [title, isChk], (err, result) => {
    if (err) {
        console.log(err);
    } else {
        console.log(result.insertId); // 새로 추가된 레코드의 ID
    }
});

result.insertId를 통해 새로 추가된 레코드의 id를 참조할 수 있습니다.

 

 

 

 

[nodemon] app crashed - waiting for file changes before starting... 나올경우 

npm uninstall -g nodemon
npm install -g nodemon

 

 

ex2)

USE myworks;


DROP TABLE customer;
CREATE TABLE customer (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    addr VARCHAR(100)
);


DELETE FROM customer;

-- 5명 추가
INSERT INTO customer (name, addr) 
VALUES
('김동욱', '서울');


select * from customer;
반응형