bunjs를 사용하여 api와 같은 표현 작성

흥미로운 기술 동영상을 찾기 위해 Youtube를 우연히 발견했고 Zig로 작성된 자바스크립트 런타임인 Bun에 대해 이야기하는 동영상을 찾았습니다. Nodejs보다 훨씬 빠른 엄청나게 빠른 런타임으로 소개됩니다.

그래서 나는 시도하기로 결정했습니다…

Bun에서 http 서버 API를 살펴봅니다.

명령줄에서 롤빵을 다운로드하는 방법은 다음과 같습니다.

curl -fsSL https://bun.sh/install | bash


첫 번째 방법은 js 파일이 가져오기 기능이 있는 기본 개체를 내보내는 경우 서버를 시작하는 것입니다.

indexjs 내부

export default {
  fetch(req) {
    return new Response("HI!");
  },
};


또는 Bun.serve를 사용할 수 있습니다.

Bun.serve({
  fetch(req) {
    return new Response("HI!");
  },
});


서버를 시작하려면 bun run index.js를 실행합니다.

그리고 그게 다야 ! 모든 것이 작동하고 있습니다…

하지만 이 API는 너무 하위 수준이므로 프로젝트가 커지면 개발자가 중복 코드를 작성해야 합니다. 그래서 처음부터 bun을 사용하여 api와 같은 익스프레스를 만들기로 결정했습니다. bun을 처음 사용하는 모든 사람은 익스프레스에 대한 경험이 있다면 bun api를 배울 필요가 없습니다.

여기 제가 하는 일이 있습니다.

먼저 요청을 처리해야 합니다.

http 메서드가 포함된 BunServer 클래스를 만듭니다.



http 메소드를 거치는 모든 것은 델리게이트 기능을 사용하여 처리합니다.
requestMap는 경로 맵과 해당 핸들러를 저장합니다.
middlewares 사용자가 선언한 모든 미들웨어를 저장합니다.


위는 캐시에 저장하는 대리자 기능입니다.

이것이 우리가 요청을 처리하는 방법입니다. 매우 간단합니다.

다음은 미들웨어입니다.

Express에는 시그니처(req, res, next)가 있는 미들웨어 기능이 있으며 이는 chain of responsibility 디자인 패턴입니다. 다음은 내가 구현한 방법입니다.



미들웨어 전달을 처리하기 위해 Chain 클래스를 만들었습니다. 여기서 알아야 할 몇 가지 사항입니다.
  • 다음 함수가 호출될 때마다 index++ 해당 인덱스가 있는 미들웨어에서 콜백 함수를 가져옵니다.
  • 정지 신호. 미들웨어 통과를 중지하려면 먼저 어떤 사용자가 미들웨어 중 하나에서 응답을 반환하는지 확인합니다this.ready. 그리고 this.isFinish() , 우리는 이미 모든 미들웨어를 호출했습니다.

  • 마지막으로 bun api의 가져오기 메서드에 대해 마무리합니다.


    요청이 들어오면 먼저 모든 미들웨어를 먼저 호출하고 미들웨어가 요청을 중지하지 않으면 실제로 비즈니스 로직을 처리하는 요청 핸들러를 호출했습니다.

    사용 방법은 다음과 같습니다.

    패키지 이름은 bunrest이며 이미 npm에 게시되어 있습니다.

    npm i bunrest
    


    먼저 서버 개체를 만듭니다.

    import App from 'bunrest'
    const server = new App.BunServer();
    


    그런 다음 익스프레스처럼 사용할 수 있습니다.

    server.get('/test', (req, res) => {
      res.status(200).json({ message: 'succeed' });
    }, (req, res, next) => {
      console.log('get');
      next();
    });
    server.put('/test', (req, res) => {
      res.status(200).json({ message: 'succeed' });
    }, (req, res, next) => {
      console.log('put');
    });
    server.post('/test', (req, res) => {
      res.status(200).json({ message: 'succeed' });
    });
    


    미들웨어 추가

    // or you can add the middlewares this way
    server.get('/user', 
        (req, res) => { /** handle request **/ }, 
        (req, res, next) => {
          /**
           *  Handle middlewares
           * */
        });
    


    라우터 추가

    // add router
    const router = server.Router();
    
    router.get('/test', (req, res) => {
      res.status(200).json({ message: 'Router succeed' });
    })
    
    router.post('/test', (req, res) => {
      res.status(200).json({ message: 'Router succeed' });
    })
    
    router.put('/test', (req, res) => {
      res.status(200).json({ message: 'Router succeed' });
    })
    
    server.use('/your_route_path', router);
    


    마지막으로 서버를 시작하려면

    server.listen(3000, () => {
      console.log('App is listening on port 3000');
    });
    


    소스 코드를 확인하거나 기여하려면 여기github 페이지를 참조하십시오.

    좋은 웹페이지 즐겨찾기