본문 바로가기

LAMP/JavaScript

[Node.js] Mysql 연동

1. npm 설치

npm i --save mysql

 

2. DB 연결

let mysql = require("mysql");

let connection = mysql.createConnection({
    host: "localhost", // DB 서버주소 
    port: "3306", // 포트 번호
    user: "root", // 사용자 이름
    password: "1234", // 비밀번호
    database: "db_test", // 데이터베이스 이름
});

connection.connect();

 

➕ Mysql 계정 설정 명령어 모음

로그인 mysql -u root -p
사용할 DB 선택 use mysql
계정 정보 확인(user 테이블) SELECT user, host, authentication_string from user
계정 추가 CREATE USER '계정'@'ip addr' IDENTIFIED WITH mysql_native_password by '비밀번호'
권한 추가 GRANT ALL PRIVILEGES ON *.* TO '계정'@'ip addr'
권한 확인 SHOW GRANTS FOR '계정'@'ip addr'
권한 삭제 REVOKE ALL ON *.* FROM '계정'@'ip addr'
계정 삭제 DROP USER '계정'@'ip addr'
적용 FLUSH PRIVILEGES

✅ 오류 시 노란 배경의 명령어 확인하기!

 

3. SELECT

// SELECT
db.query(`SELECT * FROM TOPIC`, (error, topics) => {
    let title = "CREATE";

    let list = template.list(topics);
    let html = template.HTML(
        title,
        list,
        "",
        `<form action="/create_process" method="post">
            <p>
                <input type="text" name="title" placeholder="INPUT TITLE">
            </p>
            <p>
                <textarea cols="50" rows="10" name="description" placeholder="INPUT DESCRIPTION"></textarea>
            </p>
            <p>
                <input type="submit" value="CREATE">
            </p>
        </form>`
    );

    response.writeHead(200);
    response.end(html);
});

 

4. INSERT

// INSERT
// 작성 화면
else if (pathname === "/create") {
    db.query(`SELECT * FROM TOPIC`, (error, topics) => {
        let title = "CREATE";

        let list = template.list(topics);
        let html = template.HTML(
            title,
            list,
            "",
            `<form action="/create_process" method="post">
                <p>
                    <input type="text" name="title" placeholder="INPUT TITLE">
                </p>
                <p>
                    <textarea cols="50" rows="10" name="description" placeholder="INPUT DESCRIPTION"></textarea>
                </p>
                <p>
                    <input type="submit" value="CREATE">
                </p>
            </form>`
        );

        response.writeHead(200);
        response.end(html);
    });
}

// 처리
else if (pathname === "/create_process") {
    let body = "";

    request.on("data", (data) => {
        body += data;
    });

    request.on("end", () => {
        let post = qs.parse(body);

        db.query(
            `INSERT INTO TOPIC(title, description, created, author_id) VALUES(?, ?, NOW(), ?)`,
            [post.title, post.description, 1],
            (error, result) => {
                response.writeHead(302, { location: `/?id=${result.insertId}` });
                response.end();
            }
        );
    });
}

 

5. UPDATE

// UPDATE
let body = "";

request.on("data", (data) => {
    body += data;
});

request.on("end", () => {
    let post = qs.parse(body);

    db.query(
        `UPDATE TOPIC SET TITLE = ?, DESCRIPTION = ? WHERE ID = ?`,
        [post.title, post.description, post.id],
        (error, result) => {
            response.writeHead(302, { location: `/?id=${post.id}` });
            response.end();
        }
    );
});

 

6. DELETE

let body = "";

request.on("data", (data) => {
    body += data;
});

request.on("end", () => {
    let post = qs.parse(body);

    db.query(`DELETE FROM TOPIC WHERE ID = ?`, [post.id], (error, result) => {
        response.writeHead(302, { location: `/` });
        response.end();
    });
});

 

'LAMP > JavaScript' 카테고리의 다른 글

[JS] Callstack, Event Loop  (0) 2024.08.09
[JS] Promise & async/await 팁  (0) 2024.08.05
[Node.js] 기본 설정  (0) 2024.04.15
[Node.js] sanitizzeHtml  (0) 2024.04.05
[Node.js] Node.js 환경변수 설정  (0) 2024.04.03