node.js 및 MySql을 사용하여 삭제 끝점을 만드는 방법

routes.js 파일에서 끝점을 정의합니다.
router.delete( "/delete-user/:userId", authentication, authorise({ roles: [ADMIN] }), deleteUserById );
이 끝점에서는 URL, 미들웨어 및 컨트롤러를 사용합니다.
  • 먼저 URL을 정의합니다.
  • 사용자가 로그인했는지 확인(인증)
  • 사용자가 관리자, 손님이면 무엇이든 인증합니다. (권한-선택 사항)
  • 컨트롤러를 정의합니다.

  • 엔드포인트는 사용자 ID로 사용자 레코드를 삭제합니다. 즉, req.params에서 사용자 ID를 확인하고 yup으로 유효성을 검사한 다음 작업 기능으로 사용자를 제거한 다음 응답을 제공합니다.

    const removeUserById = require("~root/actions/users/removeUserById");
    const handleAPIError = require("~root/utils/handleAPIError");
    const deleteUserByIdSchema = require("./schemas/deleteUserByIdSchema");
    
    const deleteUserById = async (req, res) => {
      const { userId } = req.params;
    
      try {
        await deleteUserByIdSchema.validate(
          { userId },
          {
            abortEarly: false
          }
        );
    
        await removeUserById({
          userId
        });
    
        res.status(200).send();
    
      } catch (err) {
        handleAPIError(res, err);
      }
    };
    
    module.exports = deleteUserById;
    


    빠른 팁: 컨트롤러:"delete"(컨트롤러는 항상 CRUD 작업으로 이름이 지정됩니다. 그래서 컨트롤러 이름이 항상 delete,put,post,get 등으로 지정됩니다.) => Action:"remove"
  • 컨트롤러를 생성한 후 액션을 생성합니다. 액션은 비동기 함수입니다. 매개변수로 userId가 있고 {deleteUser}를 반환합니다.

  • const deleteUserById = require("./queries/deleteUserById");
    
    const removeUserById = async ({ userId }) => {
      const deletedUser = await deleteUserById({ userId });
      return { deletedUser };
    };
    
    module.exports = removeUserById;
    


  • 작업을 만든 후에는 쿼리가 필요합니다. removeUserById 폴더 안에 쿼리 폴더를 만듭니다. 우리는 이 프로젝트에 MySQL을 사용하고 있습니다. 기본적으로 데이터베이스에 "사용자 테이블에서 user_id와 연결된 사용자 레코드를 찾으십시오"라고 알려야 합니다.

  • const { submitQuery } = require("~root/lib/database");
    
    const deleteUserById = ({ userId }) => submitQuery`
      DELETE FROM users   
      WHERE user_id = ${userId};
    `;
    
    module.exports = deleteUserById;
    


  • 쿼리를 생성한 후 yup을 사용하여 프로세스를 확인할 수 있습니다. schemas 폴더 안에 deleteUserById 폴더를 만듭니다. user_id가 number,required?, positive(!-), integer?인지 확인할 수 있습니다. 또는 레이블("")이 있습니다.

  • const yup = require("yup");
    
    const deleteCuttingToolByIdSchema = yup.object().shape({
      userId: yup
      .number()
      .required()
      .positive()
      .integer()
      .label("User ID")
      .typeError("User ID must be a number.")
    });
    
     module.exports = deleteCuttingToolByIdSchema
    


  • 이 프로세스 후에 프로젝트 데이터베이스 스키마를 가지고 놀아야 합니다. 이 시나리오에는 사용자 테이블인 상위 테이블이 있습니다. 또한 2개의 하위 테이블이 있습니다. 그래서 MySql에서 ON DELETE CASCADE 명령을 사용할 수 있습니다. 이 명령은 ON CASCADE DELETE 명령을 포함하는 모든 레코드에 대한 레코드를 삭제합니다. 다음과 같습니다. 그래서 FOREING KEY에 해당 명령을 입력합니다. user_id 열을 참조하는 모든 테이블에 아래와 같이 변경해야 합니다.
  • FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
  • DELETE/delete-user/1을 호출하여 Postman에서 테스트합니다.
  • 좋은 웹페이지 즐겨찾기