ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js の Express フレームワークの詳細

Node.js の Express フレームワークの詳細

青灯夜游
青灯夜游転載
2021-06-15 10:21:132527ブラウズ

この記事では、Node.js の Express フレームワークについて詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Node.js の Express フレームワークの詳細

多くの言語には、プロジェクトの開発と保守をより迅速に行うのに役立つフレームワークがいくつかあります。たとえば、JS には、Vue、React、Angular などの一般的なフレームワークがあります。 Node .js も例外ではなく、Node.js プロジェクトの開発に役立つフレームワークがいくつかあります。

現在、より人気のある Node.js フレームワークは、ExpressKoaEgg.js です。どの Node.js フレームワークであっても、 , ミドルウェアをベースに実装されており、ミドルウェアの実行方法はオニオンモデルに基づいている必要があります。 [推奨学習: 「nodejs チュートリアル」]

オニオン モデル

抽象的な説明、タマネギの中心点を通過するには、まずタマネギの皮を層ごとに中心点まで内側に貫通し、次に中心点から層ごとに外側に移動します。中心点 表皮の貫通 、ここに特徴があります: 入るときに表皮の何層を貫通し、出るときに表皮の何層を貫通する必要があるか。最初に表皮に浸透し、次に表皮から出るこの構造は、スタック構造の先入れ後出しの原理に沿っています。

Node.js フレームワークでは、玉ねぎの皮を

middleware:

    中心点を外側から入力する処理を定義できます。はキーワードです
  • next()
  • 各ミドルウェアが実行された後、内側から外側に、ミドルウェアの次の層に入り、最後の層まで進みます。
Express フレームワークをいくつか簡単に見てみましょう。

Express

Express は、Node.js の HTTP サービスのフレームワークです。フレームワークを理解するには、次のようにします。最良の方法は、

  • 主要な機能
  • を理解し、
  • が解決したい問題を推測することです
その主要な機能を理解するには、

Express の Web サイト にアクセスして、その 機能 を参照してください。これらのコア機能はすべて、より便利で簡潔になるように設計されています。 Provide HTTP サービスを作成することで、開発の負担が大幅に軽減され、迅速に開発を開始できるようになります。

Node.js の Express フレームワークの詳細いくつかの

機能

:

ルーティング: 対応するルートを処理用のモジュールとして分離します
  • #request
  • /
  • response 属性を単純化することで、対応する属性を変換せずに直接使用できるようになります。 request
      :
    • pathnamequery など response
    • :
    • send () json()jsonp() など##ミドルウェア (
    • next()
    )
  • プロセス コードの組織化の改善#Async は Express
    • のオニオン モデルを破壊します#Express じゃんけんゲームを変更する

Express フレームワーク、game.js ゲーム モジュール、および # を使用して、じゃんけん ゲームを変更します。 ##index.html ページのコードは変更されていません。github

および

clone にアクセスできます。 index.js Express を変換するには、最初に expressnpm

:

npm iexpress とともにインストールする必要があります。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。