카테고리 없음

[Node.js] 회원 CRUD하기

장일규 2022. 5. 16. 08:26

모든 정보 시스템에 핵심은 CRUD입니다.

이번 시간에는 사용자인 클라이언트가 서비스를 이용하고 싶으면 회원가입을 해야하고, 서비스를 이용하고 싶다면 회원에 대한 정보를 읽어와야 하고, 회원 정보를 수정하고 싶다면 수정을 해야하고, 더 이상 서비스를 이용하고 싶지 않다면 회원 탈퇴를 해야합니다.

 

이전 시간에 회원 관리 REST API 정하고 이해하기에서 회원 정보 관리에 대한 요구사항을 정하고, API 설계를 했습니다.

회원(User)이라는 자원에 대해서 Create, Read, Update, Delelte에 대해서 공부해 보려고합니다.

그리고 몽구스(mongoose)를 이용해서 스키마 정의하고 모듈화 하기에서 회원 정보에 들어갈 모델 필드도 만들었습니다.

🙋‍♂️ 회원 등록

1. 클라이언트가 email, password, name, gender를 입력하고, 로그인 버튼을 눌르면 http://localhost:3000/api/v1/auth/register 엔드포인트로 핸들링 된다.

 

2. req.body로 클라이언트가 입력한 정보를 destructuring한다.

 

3. 클라이언트가 필수 입력하지 않은 데이터에 대한 검증을 진행한다.

 

4. 회원에 정보를 저장한다.

 

5. 서버에서 클라이언트에게 상태 응답코드등록한 회원 정보를 전달합니다.

const registerUser = async (req, res) => {
    // 2
    const { gender, name, email, password } = req.body;
    // 3
    if (!gender || !name || !email || !password) {
        throw new BadRequestError("please provide all information");
    }
    // 4
    await User.create(req.body);

    // 5
    res
      .status(StatusCodes.CREATED)
      .json(user);
};

🙋‍♂️ 회원 수정

6294dce13d61526fe81a29dc라는 유저가 모든 정보를 변경 요청

1. 클라이언트 회원 id는 고유한 정보입니다. http://localhost:3000/api/api/v1/users/6294dce13d61526fe81a29dc

 

2. param에 있는 6294dce13d61526fe81a29dc 값을 추출하여 id에 담습니다.

 

3. 사용자가 수정 할 데이터를 담고 있는 req.bodydestructuring합니다.

 

4. findByIdAndUpdate함수에는 회원id, 변경 할 update값, new: truerunValidators: true 값을 넣어 줬습니다.

new: true 시 원본이 아닌 수정된 문서를 반환 (기본은 false)

runValidators:

(자세한건 findByIdAndUpdate 여기서 확인 부탁드립니다.)

 

5. 상태코드 200변경 된 회원 정보를 리턴해줍니다.

const updateUser = async(req, res) => {
    // 2
    const { id } = req.params;
    // 3
    const { email, password, name, gender, introduce } = req.body;
    // 4
    const user = await User.findByIdAndUpdate(
        id, 
        {
            email,
            password,
            name,
            gender,
            introduce,
        },
        { new: true, runValidators: true }
    );

    // 5
    res.status(StatusCodes.OK).json(user);
};

 

🙋‍♂️ 회원 삭제

1. http://localhost:3000/api/api/v1/users/6294dce13d61526fe81a29dc

 

2. param에서 회원(User)에 고유 id인 6294dce13d61526fe81a29dc를 추출합니다.

 

3. deleteOne함수를 사용하여 id에 대한 값을 DB에서 찾은 후 삭제합니다.

 

4. 상태코드 200과 성공적으로 삭제되었다는 메시지를 클라이언트에게 전달해줍니다.

const removeUser = async(req, res) => {
    // 2
    const { id } = req.params;
    // 3
    await User.deleteOne({ _id: ObjectId(id) });
    // 4
    res.status(StatusCodes.OK).json({ msg: "successfully deleted" });
};

🙋‍♂️ 한명의 회원 조회

1. http://localhost:3000/api/api/v1/users/6294dce13d61526fe81a29dc

 

2. param에서 회원(User)에 고유 id인 6294dce13d61526fe81a29dc 를 추출합니다.

 

3. findById함수를 사용하여 id를 인자로 전달하여, DB에서 찾은 후 user변수에 담습니다.

 

4. 상태코드 200조회한 회원(user)에 정보를 클라이언트에게 전달해줍니다. 

 

const getUser = async(req, res) => {
    // 2
    const { id } = req.params;
    // 3
    const user = await User.findById(id);
    // 4
    res.status(StatusCodes.OK).send(user);
};

🙋‍♂️ 모든 회원 조회

1. http://localhost:3000/api/api/v1/users

 

2. find함수를 사용하여 모든 회원을 조회합니다.

 

3. 상태코드 200조회한 모든 회원에 정보를 클라이언트에게 전달해줍니다.

const getUsers = async(req, res) => {
    // 2
    const users = await User.find();
    // 3
    res.status(StatusCodes.OK).send(users);
};