개발/Javascript(Typescript)
[postgresql] express 서버에서 데이터 insert 하기
piece5
2023. 8. 30. 22:56
출처
https://dev.to/shreshthgoyal/user-authorization-in-nodejs-using-postgresql-4gl
1. postgresql 데이터베이스 접속
db.js
const {Pool} = require("pg");
require("dotenv").config();
const dbConfig = {
user: process.env.PG_USER,
password: process.env.PG_PASSWORD,
host: process.env.PG_HOST,
port: process.env.PG_PORT,
database: process.env.PG_DATABASE,
};
const client = new Pool(dbConfig);
client.connect();
module.exports = client;
2. 라우터 만들기
axios body를 가져오기 위하여 body-parser 모듈이 필요함.
...
const bodyParser = require("body-parser");
const userRouter = require('./routes/user');
...
app.use(bodyParser.json())
...
app.use('/user', userRouter)
...
데이터베이스 접속이 필요한 곳 (user.js)에 db.js 가져오기
const express = require("express");
const router = express.Router();
const client = require("../db");
router.post("/register", async (req, res, next) => {
console.log(req.body);
const {user_name, user_password} = req.body;
...
});
module.exports = router;
3. user_account 테이블에 아이디 비밀번호 insert 하기
bcrypt : 비밀번호 해싱
jsonwebtoken : 웹토큰
아이디(user_name)가 이미 사용되고 있는 아이디인지 확인하고 맞으면 409 에러 메세지를 반환한다.
새로운 아이디가 맞다면 비밀번호를 해싱하고 user_account에 insert 한다.
...
const bcrypt = require("bcrypt");
const jwtGenerator = require("jsonwebtoken");
router.post("/register", async (req, res, next) => {
console.log(req.body);
const {user_name, user_password} = req.body;
try {
const confirmUser = await client.query(`SELECT * FROM user_account WHERE user_name=$1`, [user_name,]);
if (confirmUser.rows.length !== 0) {
return res.status(409).json({
error: "Sorry! An account with that ID already exists!",
});
} else {
bcrypt.hash(user_password, 10, async (err, hashedPassword) => {
if (err) {
return res.status(500).json({
error: err.message,
});
} else {
const userQuery = `INSERT INTO user_account(user_name, password_hash) VALUES($1, $2) RETURNING user_id`;
const user_no = await client.query(userQuery, [user_name,hashedPassword]);
const token = jwtGenerator(user_id);
res.status(200).json({
message: `Account created successfully!`,
token,
});
}
})
}
} catch (err) {
console.error(err);
}
});
module.exports = router;