create 기능 구현하기
파일 분리를 위해 routes 폴더를 만들고 그 안에 register.js라는 파일을 만들어 넣는다.
router.post('/', (req, res, next) => {
models.Users.create({
email: req.body.email, // 사용자로부터 입력 받은 email
name: req.body.name, // 사용자로부터 입력 받은 name
})
.then((result) => { // 회원 가입 성공 시
res.send(result);
})
.catch((err) => { // 회원 가입 실패 시
res.send(err);
});
});
server.js에 라우터 사용을 위해 아래와 같은 코드를 작성해서 넣어준다.
app.use('/register', require('./routes/register'));
아직 프론트 부분을 제대로 구현하지 못해서 postman을 이용해서 데이터를 삽입해준다. 이는 url을 이용해서 들어가서 테이블에 데이터를 넣어준다. 이전에 port를 3001로 구현하였기에 localhost:3001/register을 넣어 post형식으로 값을 넣고, 이를 반환하는지 본다.
Read 기능 구현하기
Seqeulize를 이용해서 조회 기능을 구현할 때에는 findOne(), findAll() 등의 메서드를 이용한다.
- findOne : 데이터 단일 조회 시 사용
- findAll : 데이터 전체 조회 시 사용
1) findOne()을 이용한 단일 조회
router.get('/one', (req, res, next) => {
models.Users.findOne({}) // {} 안에 조건을 추가할 수 있다.
.then((user) => {
res.status(200).json(user);
});
});
위와 같이 코드를 정의하고 localhost:3000/register/one으로 GET 호출을 하면 Users 테이블의 제일 첫번째 데이터를 리턴으로 받을 수 있다.
2) findAll()을 이용한 전체 조회
findAll()을 이용하면 조건을 걸어서 해당 조건에 부합하는 모든 데이터를 가져오는 경우 사용되거나 특정 컬럼 전체를 가져올 때 사용된다. 여기서는 where절에 deleteAt이 null인 값만 가져오게 하였다. localhost:3000/register/all로 GET 호출을 하여 데이터의 모든 값을 가져오게 하였다.
router.get('/all', (req, res, next) => {
models.Users.findAll({
where: { // where을 통해서 필터링된 데이터를 가져올 수 있다.
deletedAt: null
}
})
.then((user) => {
res.status(200).json(user);
});
});
3) 특정 컬럼의 데이터를 가져오는 경우
: 가져오고 싶은 특정 컬럼값만 지정하여 가져왔다.
router.get('/something', (req, res, next) => {
models.Users.findAll({
attributes: ['email', 'name']
// attributes를 사용하고 배열의 값에 리턴받을 컬럼명을 입력한다.
})
.then((user) => {
res.status(200).json(user);
});
});
Update 기능 구현하기
Seqeulize를 이용해서 수정 기능을 구현할 때에는 update() 메서드를 이용한다. 이 기능은 회원가입해서 나중에 회원정보수정하기 기능에서 사용할 수 있다.
router.patch("/change", (req, res, next) => {
models.Users.update({ name: "uhee" }, { where: { name: "uheeking" } })
.then((result) => {
res.status(200).send();
})
.catch((err) => {
res.send(err);
});
next();
});
- 첫번째 괄호 : 바꿀 데이터
- 두 번째 괄호 : 가져와서 바꿀 데이터의 조건
→ 테이블의 name 컬럼에서 uhee이라는 데이터를 uheeking으로 바꾼다.
Delete 기능 구현하기
Seqeulize를 이용해서 수정 기능을 구현할 때에는 destroy() 메서드를 이용한다. 조건을 주지 않을 경우 모든 데이터가 삭제될 수 있으므로 유의해야 한다.
router.delete("/del", (req, res, next) => {
models.Users.destroy({where: {name: null}})
.then((result) => {
res.status(200).send();
})
.catch((err) => {
res.send(err);
});
next();
});
update나 delete기능은 postman에서 확인이 안되므로 터미널 콘솔창이나 mysql에 들어가서 확인해야 한다.
이러한 오류가 떴을 경우는 미들웨어에서 req, res의 위치가 바뀌어서 뜨는 것이다. req가 먼저 오게 써줘야 한다.
참고한 사이트:
https://wonyoung2257.tistory.com/7?category=805961