nodejs - mysql 간단한 연동 공부
nodejs express(4.16) & mysql(5) 연동하는 아주 간단한 코드를 작성해보았다.
node 와 mysql 이 설치되어 있어야 한다.
npm init 을 하고,
npm i express dotenv mysql2
를 설치한다.
기본 데이터베이스 세팅
twit001.sql
/*
* prepare database(mysql)
* mysql -u root -p < twit001.sql
* $ mysql -u root -p
*/
DROP database twit001;
CREATE database twit001;
USE twit001;
CREATE table twit (
id INT(11) NOT NULL AUTO_INCREMENT,
user VARCHAR(20) NOT NULL,
memo VARCHAR(150) NOT NULL,
created_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id)
)
DEFAULT CHARSET=utf8;
INSERT INTO twit001.twit(user, memo) VALUES('sherlock', 'hello mysql...');
insert into twit001.twit(user, memo) values('lily', 'hello oracle...');
소문자로 입력해도 괜찮다.
$ mysql -u root -p < twit001.sql
워킹디렉토리에 위치시키고 터미널에서 위 명령어를 입력하면, 해당 파일에 sql 문을 적용할 수 있다.
구글에 "mysql batch" 로검색해보자.
참고: https://dev.mysql.com/doc/refman/8.0/en/batch-mode.html
MySQL :: MySQL 8.0 Reference Manual :: 3.5 Using mysql in Batch Mode
3.5 Using mysql in Batch Mode In the previous sections, you used mysql interactively to enter statements and view the results. You can also run mysql in batch mode. To do this, put the statements you want to run in a file, then tell mysql to read its input
dev.mysql.com
app.js
const express = require('express');
const mysql = require('mysql2');
require('dotenv').config();
const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_DBNAME
});
app.get('/', (rea, res) => {
res.send('hello node mysql~~');
});
app.get('/memo', (req, res) => {
connection.query(`SELECT * FROM twit`, (err, results, fields) => {
if (err) throw err;
console.log('results: ', results);
// console.log('fields: ', fields);
res.json(results); // json
});
});
app.get('/memo/:id', (req, res) => {
connection.query(
`SELECT * FROM twit WHERE id=?`,
[req.params.id],
(err, results, fields) => {
if (err) throw err;
console.log('results: ', results);
res.json(results);
}
);
});
// maybe you need tool like 'Postman' or 'httpie'
app.post('/memo', (req, res) => {
// assume Content-type in client request headers is application/json
// {"user": "sherlock", "memo":"nodejs is..."}
const { user, memo } = req.body;
connection.query(
`
INSERT INTO twit(user, memo) VALUES(?, ?)
`,
[user, memo],
(err, results, fields) => {
if (err) throw err;
console.log('results: ', results);
res.send('memo ok');
}
);
});
app.patch('/memo/:id', (req, res) => {
connection.query(
`UPDATE twit SET memo=? WHERE id=? `,
[req.body.memo, req.params.id],
(err, results, field) => {
if (err) throw err;
console.log('results: ', results);
res.send('update ok');
}
);
});
app.delete('/memo/:id', (req, res) => {
connection.query(
`DELETE FROM twit WHERE id=?`,
[req.params.id],
(err, results, fiels) => {
if (err) throw err;
console.log('results: ', results);
res.send('delete ok');
}
);
});
app.listen(5000, () => {
console.log('Server is running port 5000...');
});
.env
DB_HOST=127.0.0.1
DB_USER=root
DB_PASS=데이터베이스 암호를 입력한다
DB_DBNAME=twit001
mysql2 npm 페이지를 꼭 참고하자.
https://www.npmjs.com/package/mysql2
mysql2
fast mysql driver. Implements core protocol, prepared statements, ssl and compression in native JS
www.npmjs.com
포스트맨으로 잘 작동하는 지 확인하면 된다.