<aside> 💡 CLI환경이 아닌 Node.js에서 SQL을 쿼리해보자(feat. bulk Insert, InsertId)

</aside>

Node.js에서 SQL 쿼리하기

1. Node.js와 Mysql 연결하기

Node.js파일에서 Mysql db에 접속하기 위해서는 아래와 같은 방식을 이용하면 된다. (출처: https://www.w3schools.com/nodejs/nodejs_mysql.asp)

const mysql = require('mysql')
//이 역시 당연히 npm install mysql이 선행 되어야 할 것이다.

const con = mysql.createConnection({
	host: "localhost",
	user: "root",
	password: "myrealpassword supposed to be written"
})

//만약에 위의 내용이 config파일에 따로 저장이 되어져 있다면, 
//const config = require('/config의 파일경로') 로 불러오고
//const con = mysql.createConnection(config[development]) 와 같은 형식으로 쉽게 연결 할 수 있다. 
//아직 왜인지는 모르겠지만, 이 경우, con이라는 변수를 선언 해주기전에
//dotenv.config(); 라고 실행을 시켜줘야 하는 걸로 나온다.
//나중에 알게 되면 다시 업로드하자.

con.connect(function(err){
	if(err) throw err;
  console.log("Connected")
})

2. Query a Database of MySQL(InsertId, bulk Insert)

이제 연결이 되었으니, 우리는 MySQL DB에 쿼리를 보낼 수 있다. 그 형식은 아래와 같다. (출처: https://www.w3schools.com/nodejs/nodejs_mysql.asp)

...//앞서 연결한 작업이 선행 되었다고 가정하자. 
const db = con.connect((err) => {
  if (err) throw err;
});

module.exports = {
	get: async (req, res) => {
		const sql = 'SELECT * FROM table_name WHERE column_name = valueYouWant'
		
		await db.query(sql, (err, result) => {
			if(err) return res.sendStatus(400)
			return res.status(200).json(result);
		})
	},

//만약 여러개의 params를 보내거나, 여러개의 값들을 INSERT INTO 하고 싶다면, 
//아래와 같이 bulk insert해주는게 필요하다.
	post: (req res) => {
		const sql = 'INSERT INTO table_name(column_name1,2,3) VALUES ?'
		const params = [[a, b, c], [aa, bb, cc], [aaa, bbb, ccc], ...]
		db.query = (sql, [params], async (err, result) => {
			if(err) return res.sendStatus(400);
			

			//여기서 만약 위에서 쿼리를 통해 추가한 값 들을 재가공하여, 다른 조인테이블에 넣고 싶다면,
			//insertId라는 키값이 있으므로 사용해보자.
			//우선 값을 넣는 sql을 선언하고, 
			const sql2 = "INSERT INTO table_2(order_id, item_id) VALUES ?"
			const params2 = result.map(el => {
				return [result.insertId, el.itemId]
			});

			db.query(sql, [params2], (err, result) => {
				if(err) return res.sendStatus(400)
				return res.status(200).json(result);
			})
			
		})
	}

}