전 게시글을 확인하고 읽어주시기 바랍니다:)
전에 열심히 셋팅한 Sequelize를 이용하여 이제 Local User를 생성하는 즉 로컬 회원가입을 개발해보자.
폴더 구조는 src에 api 폴더를 만들고, user api를 수행할 user 폴더 안에 라우팅을 처리할 index.ts와 비즈니스 로직을 처리할 user.service.ts를 만들어서 진행한다.
타 API를 개발하면 폴더를 추가로 생성하면 된다.
먼저 src/index.ts에 라우팅 처리를 해보자
app.use()를 사용하면, 어떤 Http Method가 들어오든 실행하게 되는 데, /api 경로에 들어온 모든 요청을 잡아서 src/api 폴더로 보내기 위해서 src/index.ts를 아래와 같이 수정한다.
// src/index.ts
import express, { Request, Response } from 'express'
import sequelize from './models'
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
// /api에 Http 요청이 오면 api 폴더로 가게 함.
app.use('/api', require('./api'))
const port: number = 3000
app.listen(port, async () => {
console.log(`SERVER ON! PORT : ${port}`)
await sequelize
.authenticate()
.then(async () => {
console.log('connection success')
})
.catch((e) => {
console.log(e)
})
})
그리고 api 폴더에 index.ts를 생성하여 /api에 요청이 들어올 때 또 라우팅 처리를 한 번 더 해준다.
src/index.ts에서 해준 것과 동일하게 router.use를 이용하여 /api/user에 어떤 Http Method가 들어오든 user 폴더로 보내는 처리를 해준다.
// src/api/index.ts
const router = require('express').Router()
// /api/user에 요청이 오면 user 폴더로 이동
router.use('/user', require('./user'))
module.exports = router
export {}
그리고 user 폴더에도 index.ts를 생성하여 이제 user의 api 요청을 라우팅 처리할 코드를 작성한다.
/api/user에 post가 들어오면 회원가입을 진행 할 것이다.
따라서 비즈니스 로직을 처리할 user.service.ts를 가져와서 API 요청에 맞는 로직을 매칭 시키는 역할을 해준다.
// src/api/user/index.ts
const router = require('express').Router()
const user = require('./user.service')
router.post('/', user.saveUser)
module.exports = router
export {}
이제 exports를 이용하여 비즈니스 로직을 담당할 함수들을 작성하여 밖에서 읽을 수 있게 해줄 것이다.
saveUser 함수는 src/api/user/index.ts에서 /api/user에 post 요청이 올 경우 매칭을 해주고 있다.
// src/api/user/user.service.ts
import { Response, Request } from 'express'
import { User } from '../../models/domain/User'
import * as bcrypt from 'bcrypt'
import { Provider } from '../../models/interface/User.interface'
exports.saveUser = async (req: Request, res: Response) => {
try {
// request body에서 eamil, password, name 추출
const { email, password, name } = req.body
// bcrypt를 이용하여, 비밀번호를 암호화
const hash = await bcrypt.hash(password, 10)
// sequelize를 이용하여 간단하게 DB에 컬럼 추가
const saveUser = await User.create({
email,
password: hash,
name,
provider: Provider.LOCAL,
})
// 생성한 User를 리턴
res.json({ result: true, user : saveUser })
} catch (err) {
console.log(err)
}
}
일단 email, password, name을 req.body에서 추출하고 bcrypt를 이용하여 비밀번호를 암호화를 해준다.
그리고 sequelize의 메소드 중 DB에 컬럼을 추가하는 create를 사용하여 우리가 유저를 생성한다.
성공적으로 생성하면 리턴해주는 코드이며, async & await을 활용 했기에 try & catch문을 이용하여 에러를 잡아준다.
Postman으로 실행하면 제대로 작동한다!
'B.E > Node JS' 카테고리의 다른 글
[Node JS] Node JS란? (0) | 2022.11.14 |
---|---|
[Node JS] typescript + sequelize + passport로 유저 API 개발 - Passport로 Local 로그인하기 (0) | 2022.09.29 |
[Node JS] typescript + sequelize + passport로 유저 API 개발 - Sequelize 셋팅 (0) | 2022.09.29 |
[Node JS] Node.js를 Typescript 프로젝트로 셋팅하기. (0) | 2022.09.29 |
[Node JS] Body-parser 사용하기 (0) | 2022.08.21 |