>  기사  >  웹 프론트엔드  >  Node.js의 Express 프레임워크에 대한 심층 분석

Node.js의 Express 프레임워크에 대한 심층 분석

青灯夜游
青灯夜游앞으로
2021-06-15 10:21:132420검색

이 글에서는 Node.js의 Express 프레임워크에 대해 자세히 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

Node.js의 Express 프레임워크에 대한 심층 분석

많은 언어에는 프로젝트를 더 빠르게 개발하고 유지하는 데 도움이 되는 프레임워크가 있습니다. 예를 들어 JS에는 Vue, React, Angular 등과 같은 인기 있는 프레임워크가 있습니다. Node.js 프로젝트를 개발하는 데 도움이 될 수 있는 일부 프레임워크도 있습니다.

현재 널리 사용되는 Node.js 프레임워크에는 Express, KoaEgg.js가 포함됩니다. 미들웨어를 기반으로 구현되며, 미들웨어의 실행 방식은 어니언 모델을 기반으로 해야 합니다. [추천 학습: " nodejs 튜토리얼ExpressKoaEgg.js,无论是哪个 Node.js 框架,都是基于中间件来实现的,而中间件的执行方式就需要依据洋葱模型。【推荐学习:《nodejs 教程》】

洋葱模型

抽象一点解释,就是从洋葱中心点穿过去,就必须先一层层向内穿入洋葱表皮进入中心点,然后再从中心点一层层向外穿出表皮,这里有个特点:进入时穿入了多少层表皮,出去时就必须穿出多少层表皮。先穿入表皮,后穿出表皮,这种结构是符合栈结构先进后出的原则的。

在 Node.js 框架中,洋葱的表皮我们可以定义为中间件

  • 从外向内进入中心点的过程是一个关键词 next()
  • 而从内向外则是每个中间件执行完毕后,进入下一层中间件,一直到最后一层。

下面来简单了解一些 Express 框架吧!

Express

Express 是 Node.js 中 HTTP 服务的一个框架,而要了解一个框架,最好的方法是

  • 去了解它的关键功能
  • 推导出它要解决的问题是什么

那要了解它的关键功能,我们可以去 Express 的网站 查看它的 Features,这些核心功能都是为了让我们更加方便、简洁地写出 HTTP 服务,从而大大减轻我们的开发负担,让我们快速上手开发。

Node.js의 Express 프레임워크에 대한 심층 분석

一些 Features

  • 路由:将对应路由分开作为模块处理
  • request/response 属性的简化,让我们不需要经过转换,然后直接使用对应的属性。
    • requestpathnamequery
    • responsesend()json()jsonp()
  • 中间件(next()
    • 更好地组织流程代码
    • 异步会打破 Express 的洋葱模型

Express 改造石头剪刀布游戏

现在通过使用 Express 框架来改造石头剪刀布游戏,game.js 游戏模块和 index.html 页面的代码没有变动,可以去 github 上面 clone

index.js Express 改造,需要先用 npm 安装 expressnpm i express》]

양파 모델

추상적인 설명으로는 양파의 중심점을 통과하려면 먼저 양파껍질을 한 겹씩 중심점까지 침투시킨 후 중심점에서 한 겹씩 들어가야 한다는 것입니다. 표피를 뚫는다는 특징이 있습니다 들어갈 때 표피를 몇 겹 뚫고 나갈 때 표피를 몇 겹 뚫어야 합니다. 이 구조는 스택 구조의 선입후출 원리와 일치합니다.

Node.js 프레임워크에서는 어니언 스킨을 미들웨어로 정의할 수 있습니다.
  • 중심점을 외부에서 내부로 들어가는 과정은 키워드 next( );
  • 안쪽부터 각 미들웨어가 실행된 후 마지막 레이어까지 미들웨어의 다음 레이어로 들어갑니다.

몇 가지 Express 프레임워크를 간략하게 살펴보겠습니다!

익스프레스

익스프레스 Node.js의 HTTP 서비스를 위한 프레임워크입니다. 프레임워크를 이해하는 가장 좋은 방법은 프레임워크의 핵심 기능을 이해하는 것입니다.

  • 어떤 문제를 해결해야 할지추론했습니다.
  • 주요 기능을 이해하려면 Express 웹사이트 🎜 기능을 확인하세요. 이러한 핵심 기능은 모두 HTTP를 보다 편리하고 간결하게 작성할 수 있도록 설계되었습니다. 서비스를 통해 개발 부담을 크게 줄이고 빠르게 작업을 수행할 수 있습니다. 개발을 시작합니다. 🎜🎜Node.js의 Express 프레임워크에 대한 심층 분석🎜🎜일부 기능: 🎜
    • 라우팅: 해당 경로를 처리용 모듈로 분리
    • 요청/응답 속성 단순화를 통해 변환 없이 해당 속성을 직접 사용할 수 있습니다.
      • 요청: 경로 이름, 쿼리
      • 응답 :send(), json(), jsonp()
    • 미들웨어( next())
      • 프로세스 코드 구성 개선
      • 비동기성은 Express의 양파 모델을 깨뜨립니다.
    • ul>

    수정된 가위바위보 표현 game

    🎜이제 Express 프레임워크를 사용하여 가위바위보 게임, game.js 게임 모듈의 코드 및 index.html 페이지는 변경되지 않았습니다.
    github로 이동하실 수 있습니다 🎜 클론 위. 🎜🎜index.js Express 변환을 사용하려면 먼저 npm을 사용하여 express를 설치해야 합니다. npm i express. 🎜
    const fs = require('fs');
    const express = require('express');
    
    const game = require('./game');
    let playerWon = 0; // 赢的次数
    
    const app = express();
    
    // 路由功能,将对应路由功能分开作为模块处理,到时候也可以放到其它文件去
    // 通过 app.get 设定 /favicon.ico 路径的路由
    // .get 代表请求 method 是 get,所以这里可以用 post、delete 等。这个能力很适合用于创建 rest 服务
    app.get('/favicon.ico', function (request, response) {
      // 一句 status(200) 即可代替 writeHead(200); end();
      // response.writeHead(200);
      // response.end();
      response.status(200);
      return;
    })
    // 打开页面 index.html
    app.get('/', function (request, response) {
      // fs.createReadStream(__dirname + '/index.html').pipe(response);
      // send接口会判断你传入的值的类型,文本的话则会处理为text/html
      // Buffer的话则会处理为下载,html文件需要加上 `utf-8`
      response.send(fs.readFileSync(__dirname + '/index.html', 'utf-8'))
    })
    
    // next()同步状态下没有问题的,但是一旦有了异步,洋葱模型就打破了
    app.get('/game',
      function (request, response, next) {
        if (playerWon >= 3) {
          response.status(500);
          response.send('我不会再玩了!');
          return;
        }
        // 通过next执行后续中间件
        next();
        // 当后续中间件执行完之后,会执行到这个位置
        if (response.playerWon) {
          playerWon++;
        }
      },
      // 获取玩家的操作
      function (request, response, next) {
        // Express 中对 request 做了一些处理,可以直接拿到 query 参数
        // const query = querystring.parse(parsedUrl.query);
        // const playerAction = query.action;
        const query = request.query;
        const playerAction = query.action;
        response.playerAction = playerAction;
        // 通过next执行后续中间件
        next();
      },
      function (request, response) {
        // 通过 response 去挂载一些参数
        let playerAction = response.playerAction;
        // 执行游戏逻辑
        const gameRes = game(playerAction);
        // 先返回头部
        // response.writeHead(200);
        response.status(200);
        // 根据不同的游戏结果返回不同的说明
        if (gameRes == 0) {
          // response.end('平局!');
          response.send('平局!');
        } else if (gameRes == 1) {
          response.send('你赢了!');
          // 玩家胜利次数统计+1
          // playerWon++;
          response.playerWon = true;
        } else {
          response.send('你输了!');
        }
      }
    )
    app.listen(3000);
    🎜🎜코드 주소: https://github.com/V-vincent/node-introduction🎜🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 비디오🎜를 방문하세요! ! 🎜

    위 내용은 Node.js의 Express 프레임워크에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제