API만들기 - 수정API

YU NA Joe·2022년 8월 3일

indexRoute.js

app.patch("/persons", index.UpdatePerson);

indexController.js

// 사람 업데이트
// 한가지의 변수만 update 하고 싶은 경우가 있으므로 각각의 변수들마다 if를 사용한다.

exports.UpdatePerson = async function (req, res) {
    const {Person_Name, Gender, Birthday, Address, Rented_Book_Id} = req.body;
    // Person_Name이 body값에 담겨져 있고 타입이 string이 아니라면?!
    if (Person_Name && typeof Person_Name !=="string"){
        return res.send({
            isSuccess: false, 
            code :400, 
            message: "값의 형식을 정확히 해주세요",
        });
    }    
    if(Gender && typeof Gender !== "string"){
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "값의 형식을 정확히 해주세요", 
        }) ;
    }

    if(Address && typeof Address !== "string"){
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "값의 형식을 정확히 해주세요", 
        });
    }
    if(Rented_Book_Id && typeof Rented_Book_Id !== "string"){
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "값의 형식을 정확히 해주세요", 
        });
    } 
    var regex =  RegExp(/^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/);
    if (Birthday && !regex.test(Birthday)) {
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "날짜 형식을 확인해주세요", 
        }); 
    } 
    
}

형식 다르게 하여서 포스트맨으로 확인

이제 DB에 연결해 주도록 하쟈

exports.UpdatePerson = async function (req, res) {
    const {Person_Name, Gender, Birthday, Address, Rented_Book_Id} = req.body;
    // Person_Name이 body값에 담겨져 있고 타입이 string이 아니라면?!
    if (Person_Name && typeof Person_Name !=="string"){
        return res.send({
            isSuccess: false, 
            code :400, 
            message: "값의 형식을 정확히 해주세요",
        });
    }    
    if(Gender && typeof Gender !== "string"){
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "값의 형식을 정확히 해주세요", 
        }) ;
    }

    if(Address && typeof Address !== "string"){
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "값의 형식을 정확히 해주세요", 
        });
    }
    if(Rented_Book_Id && typeof Rented_Book_Id !== "string"){
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "값의 형식을 정확히 해주세요", 
        });
    } 
    var regex =  RegExp(/^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/);
    if (Birthday && !regex.test(Birthday)) {
        return res.send({
            isSuccess: false, 
            code: 400, 
            message: "날짜 형식을 확인해주세요", 
        }); 
    }  
    try {
        const connection = await pool.getConnection(async (conn) => conn);
        try {
            // rows에 select * from person; 데이터를 담아줌
          const [rows] = await indexDao.UpdatePerson(
            connection, 
            Person_Name, 
            Gender,
            Birthday, 
            Address,
            Rented_Book_Id,        
          );     
          return res.send({
            result: rows,
            isSuccess: true,
            code: 200, // 요청 실패시 400번대 코드
            message: "사람 생성 성공",
          });
        } catch (err) {
          logger.error(`Update Query error\n: ${JSON.stringify(err)}`);
          return false;
        } finally {
          connection.release();
        }
      } catch (err) {
        logger.error(`UpdateStatement DB Connection error\n: ${JSON.stringify(err)}`);
        return false;
      }  
}

==============================

idx로 update해보기


# index.route.js
app.patch("/persons:/Person_ID", index.UpdatePerson); 
   
# indexController.js

   try {
        const connection = await pool.getConnection(async (conn) => conn);
        try {
                // Person_ID validaiton 
          const IsValidPersonId = await indexDao.IsValidPersonId(Person_ID);
          if(!IsValidPersonId){
            return res.send({
                isSuccess: false, 
                code: 410, 
                message: "입력하신 인덱스 넘버가 없습니다",
            })
          } 

          const [rows] = await indexDao.UpdatePerson(
            connection, 
            Person_ID,
            Person_Name, 
            Gender,
            Birthday, 
            Address,
            Rented_Book_Id,        
          ); 
          
# indexDao.js
exports.IsValidPersonId = async function (connection, Person_ID) {
    const Query = `SELECT * FROM person WHERE Person_ID = ?;`;
    const Params = [Person_ID]; 
    const rows = await connection.query(Query, Params); 
    if(rows < 1){
        return false;
    }
    return true;
}; 

=====================================

포스트잇에서 유효성 검사

(map_env) C:\RestaurantsMap\Backend\Express>node index.js
2022-08-02 17:26:23 info: undefined - API Server Start At Port 3000
2022-08-02 17:26:39 error: Update Query error
: {}

==> update query error는 try patch에서 났다는 말!

디버깅을 해보쟈

try {
    const connection = await pool.getConnection(async (conn) => conn);
    try {
            // Person_ID validaiton 
      const IsValidPersonId = await indexDao.IsValidPersonId(Person_ID);
      if(!IsValidPersonId){
        return res.send({
            isSuccess: false, 
            code: 410, 
            message: "입력하신 인덱스 넘버가 없습니다",
        })
      } 
      console.log(1);

      const [rows] = await indexDao.UpdatePerson(
        connection, 
        Person_ID,
        Person_Name, 
        Gender,
        Birthday, 
        Address,
        Rented_Book_Id,        
      );      

      console.log(2);

but
console.log(1)도 안 찍히고 있음

2022-08-02 17:31:22 error: Update Query error
: {}

================================================

indexDao.UpdatePerson 지우고
IsValidPersonId 만 돌려보기
에러 안남!

 try {
   const IsValidPersonId = await indexDao.IsValidPersonId(connection,Person_ID);
          if(!IsValidPersonId){
            return res.send({
                isSuccess: false, 
                code:410, 
                message:"유효한 인덱스가 아님당",
            });
          }             
          return res.send({
            result: rows,
            isSuccess: true,
            code: 200, // 요청 실패시 400번대 코드
            message: "사람 업데이트 성공",
    });

# indexDao.js에 
updatePerson넣어주고!! 

exports.UpdatePerson= async function (
        connection, 
        Person_ID,
        Person_Name, 
        Gender,
        Birthday, 
        Address, 
        Rented_Book_Id,  
  ) {    
       // questionmark 순서대로  params을 넣어줘야 한당
    const Query = `update person set Person_Name = ifnull(?, Person_Name), Gender = ifnull(?, Gender), Birthday = ifnull(?,Birthday), 
    Address = ifnull(?, Address), Rented_Book_Id = ifnull(?,  Rented_Book_Id) where Person_Id = ?;`;
    const Params = [Person_Name,Gender,Birthday,Address,Rented_Book_Id,Person_ID]; 
    const rows = await connection.query(Query, Params); 
    return rows;
  }; 

0개의 댓글