노드 프로젝트 뼈대 2부: 해부

5181 단어 expressnodemongo

개요



이 게시물에서는 내 노드 애플리케이션 상용구 구조의 다양한 요소의 기능과 목적을 살펴보겠습니다.

애플리케이션을 실행하려면 에서 설명한 대로 MongoDB에 일부 데이터가 필요합니다. 이해하지 못한 경우 다시 실행하여 해당 부분을 수행하거나 애플리케이션을 실행하지 않고 따라갈 수 있습니다.

첫 번째 게시물에서도 언급했듯이, 우리는 작업할 예정이므로this repo 아직 다운로드하지 않았다면 다운로드하세요.

노드 프로젝트 스켈레톤 구성 요소



이 프로젝트를 구성하는 여러 가지 사항에 대해 간단히 이야기하겠습니다. 이것은 확실히 최소한의 프로젝트 구조입니다. 더 복잡할 수 있습니다.

이 프로젝트 골격을 원하는 이유 때문에 단순할수록 좋습니다. 나는 그것이 매우 가벼운 출발점 역할을 하고 싶습니다.

프로젝트의 기본 최상위 구조는 다음과 같습니다.


  • db/에는 서버 측 코드가 데이터베이스 명령을 수행할 수 있도록 해주는 편리한 드라이버인 MongoDB middleware for NodeJS이 포함되어 있습니다.
  • routes/ 디렉토리에는 GET/POST/PATCH/etc에 대한 논리가 있는 각 끝점에 대한 파일이 포함되어 있습니다.
  • test/ 디렉토리에는 단위 테스트와 통합 테스트가 모두 포함되어 있으며 테스트 스위트를 실행할 때 이름이 test인 디렉토리를 찾고
  • 내의 모든 것을 재귀적으로 실행합니다.
  • utils/는 단위 테스트 가치가 있는 무언가를 갖도록 이 예제에서 약간 고안되었습니다. 일반적인 응용 프로그램에서는 여기에 기타 논리 및 도우미 기능이 있습니다
  • .

  • 최상위 레벨server.js은 Mongo용 데이터베이스 클라이언트와 Express 앱 인스턴스에 대한 경로를 연결하고 포트 3000
  • 에서 실행을 시작하여 애플리케이션을 함께 묶는 접착제입니다.
  • package.json에는 이 프로젝트를 실행하는 데 필요한 다양한 npm 패키지가 포함되어 있으며 프로젝트를 정상적으로 실행하기 위한 스크립트( npm run start ) 및 테스트 도구 모음을 실행하기 위한 스크립트( npm run test )
  • 도 있습니다.

    프로젝트 요소: 경로



    이 앱에서 수행할 작업을 위해 장비와 포켓몬이라는 두 가지 주요 리소스가 있습니다. 각 리소스에는 해당 리소스에 대한 읽기 및 쓰기 작업을 수행하는 데 필요한 모든 논리가 포함된 경로 파일이 있습니다.

    아래에서 경로 파일의 기본 골격을 볼 수 있습니다. 구조는 매우 균일하며 router.<HTTP verb> 내부에 로직이 있습니다. 다음 게시물에서 경로에 대한 전체 논리를 작성할 것입니다.

    // routes/equipment.js
    
    router.get("/", async (req, res) => {
      /* Do stuff */
    });
    
    router.post("/", async (req, res) => {
      /* Do stuff */
    });
    
    router.patch("/:id", async (req, res) => {
      /* Do stuff */
    });
    
    router.delete("/:id", async (req, res) => {
      /* Do stuff */
    });
    


    프로젝트 요소: mongo 명령



    여기에서 살펴볼 내용보다 더 많은 내용이 있지만 MongoDB 명령을 잘 활용하여 데이터 세트 작업을 수행할 것입니다. 관계형 데이터베이스 배경이 있고 이전에 mongo로 작업한 적이 없다면 실제로 알아야 할 것은 SQL에서 대부분의 구성 및 기능에 해당하는 mongo를 찾는 것이 어렵지 않다는 것입니다.

    아래에서 SQL/Mongo 간 변환 가이드the MongoDB docs의 몇 가지 예를 볼 수 있습니다.



    프로젝트 요소: Mocha/Chai 테스트 툴킷



    이 가이드는 NodeJS 생태계에 대한 회오리 바람 투어이지만 테스트에서 사용할 일부 기능에 대한 간략한 가이드입니다.
  • describe()는 테스트 그룹
  • 에 대한 설명 텍스트가 있는 높은 수준의 함수 래퍼로 사용됩니다.
  • it()는 특정 테스트
  • 의 출력을 설명하는 테스트 그룹의 하위 수준 래퍼입니다.
  • assert()는 당연히 우리의 테스트에서 참일 것으로 예상되는 주장을 요구합니다. 다양한 표현을 수용할 수 있습니다
  • .
  • equals() 항목 간 동등성 측정
  • includes()는 문자열의 하위 문자열 또는 배열의 항목을 확인하는 데 사용할 수 있습니다
  • .

    다음



    3부에서는 몇 가지 엔드포인트를 구축하고 테스트를 수행할 자체 작업을 수행할 것입니다. 이 시리즈의 결론을 계속 지켜봐 주십시오.

    좋은 웹페이지 즐겨찾기