Express.JS를 사용하여 API 빌드

요약



이 포스트에서는 Node.JS에서 블로그 웹 API를 구축하는 방법을 보여 드리겠습니다. 이 튜토리얼에서는 HTTP 요청을 처리하기 위해 Express.JS를 사용하고 데이터를 저장하기 위해 Mongodb를 사용합니다.

목차


  • Introduction
  • Setup
  • Database
  • MVC Structure
  • Express Application
  • Complete Example
  • Conclusion

  • 소개

    Node.JS is a platform used for building server side applications using Javascript. With Node.JS, developers are able to build backend APIs in minutes. It has a great community and a huge set of packages. These packages help the developers for building great applications. Developers does not require to build everything from scratch. We mainly focus on two packages. First is Express.JS, which is one of the most used packages by developers to build web APIs. Second is mongoose, which is used to simplify the communication between Node.JS and MongoDB.

    요구 사항


  • 기본 자바스크립트 지식
  • Node.JS 10.0.0 이상
  • NPM 4.6.1 이상
  • Mongodb 4.2.1 이상
  • VS-Code 또는 기타 편집기

  • 설정

    A typical Node.JS application has a root directory which contains at least two files package.json (holds metadata about the application and required npm packages), and index.js file (a javascript entry file).

    • Create the directory of the project
    mkdir blog-server
    cd blog-server
    
    • Create package.json file
    npm init -y
    
    • Create index.js file (entry file)
    // index.js
    const PORT = 3000;
    console.log(`A node.js server that runs on ${PORT}`);
    
    • Run the application
    node index.js
    

    패키지



    우리의 express.js 웹 애플리케이션에는 이러한 패키지가 필요합니다.
  • 익스프레스: 라우팅 및 미들웨어 웹 프레임워크
  • cors: CORS(교차 출처 리소스 공유) 활성화
  • body-parser: json 본문을 javascript 객체로 구문 분석합니다.
  • morgan: 요청을 보는 데 중요한 http 요청을 기록합니다
  • .
  • 몽구스: mongodb ORM
  • nodemon: 변경 시 서버를 다시 시작하여 개발을 용이하게 함

  • 참고: nodemon은 개발 중에만 필요하기 때문에 개발 종속성으로 사용됩니다.
  • NPM에서 패키지를 설치합니다.

  • npm install --save-dev nodemon
    npm install --save express cors body-parser morgan mongoose
    

  • index.js 파일 내부에서 require를 사용하여 패키지를 가져옵니다.

  • const express = require("express");
    const cors = require("cors");
    const bodyParser = require("body-parser");
    const morgan = require("morgan");
    const mongoose = require("mongoose");
    

    데이터 베이스

    As mentioned above, we are using Mongodb for storing application related information. We use mongoose as object mapper between Mongodb and node.js application models.

    • Connect to mongodb
    mongoose.connect("mongodb://localhost:27017/blog");
    
    • Create mongoose schema to define the structure of the document that is read from or write to Mongodb. Create a schema named postSchema to define the structure of posts, which it has title and body.
    const postSchema = new mongoose.Schema(
       {
          title: { type: String, required: true },
          body: { type: String, required: true },
       },
       { timestamps: true }
    );
    

    MVC와 같은 애플리케이션

    An MVC app is structured into three layers [models, views, controllers]. Sometimes, extra layers are added to MVC such as DAL, Services, Repositories.
    In this example, the app is divided into three layers [models → services →controllers]. Usually, each layer exists in a directory.

    모델



    모델은 도메인별 데이터를 나타냅니다. 모델은 위에서 정의한 postSchema를 기반으로 합니다.
  • Post 모델을 생성합니다.

  • const Post = mongoose.model("post", postSchema);
    

    서비스



    서비스 계층은 컨트롤러와 모델 간의 통신을 중재하는 MVC의 추가 계층입니다. 이 레이어는 더 많은 추상화와 테스트 용이성을 추가합니다.
    두 개의 서비스를 노출하는 postService 엔터티를 만듭니다.
  • 찾기: 모든 게시물 데이터를 조회하기 위해
  • save: 게시물을 저장하기 위해

  • const postService = {
    
       find: () => Post.find({}),
    
       save: async (postData) => {
          const post = new Post({ ...postData });
          await post.save();
          return post;
       },
    };
    

    컨트롤러



    이름에서 알 수 있듯이 컨트롤러는 들어오는 요청을 제어하고 오류를 포착하고 클라이언트에 응답을 보냅니다.
    두 가지 작업이 있는 postController를 만듭니다.
  • 찾기: GET/api/posts 처리
  • 저장: POST/api/posts를 처리합니다.

  • const postController = {
    
      find: async (req, res, next) => {
          try {
             const posts = await postService.find({ ...req.query });
             res.json(posts);
          } catch (error) {
             error.msg = "failed to retrieve posts";
             next(error);
          }
       },
    
       save: async (req, res, next) => {
          try {
             const post = await postService.save(req.body);
             res.json(post);
          } catch (error) {
             error.msg = "failed to create post";
             next(error);
          }
       },
    };
    

    익스프레스 신청

    Express is a routing and middleware web framework that has minimal functionality of its own: An Express application is essentially a series of middleware function calls.

    • Create an express application
    const app = express();
    Middlewares
    Middlewares are functions executed before or after the controller actions.
    app.use(cors());
    app.use(morgan("tiny"));
    app.use(bodyParser.json());
    

    익스프레스 라우터



    익스프레스 라우터는 요청을 컨트롤러의 특정 작업으로 라우팅합니다.
    처리할 Express Router를 기반으로 두 개의 경로 정의
  • GET/api/posts
  • POST/api/posts

  • const router = express.Router();
    router.get("/posts", postController.find);
    router.post("/posts", postController.save);
    app.use("/api", router);
    

    완전한 예

    I have included a complete express server example.


    결론

    You have learnt in detail, how to create an express server and connect to mongodb for storing data. You have exposed some APIs. In this tutorial I have written all code in one file for simplicity. You can visit this repository for the complete example.

    좋은 웹페이지 즐겨찾기