Heim > Web-Frontend > js-Tutorial > Hauptteil

Ein tiefer Einblick in das Express-Framework in Node.js

青灯夜游
Freigeben: 2021-06-28 09:47:17
nach vorne
2493 Leute haben es durchsucht

Dieser Artikel gibt Ihnen eine detaillierte Einführung in das Express-Framework in Node.js. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Ein tiefer Einblick in das Express-Framework in Node.js

Viele Sprachen verfügen über einige Frameworks, die uns helfen können, Projekte schneller zu entwickeln und zu verwalten. JS verfügt beispielsweise über beliebte Frameworks wie Vue, React, Angular usw.; und Node.js ist keine Ausnahme. Es verfügt auch über einige Frameworks, die uns bei der Entwicklung von Node.js-Projekten helfen können.

Zu den derzeit beliebten Node.js-Frameworks gehören Express, Koa und Egg.js. Egal um welches Node.js-Framework es sich handelt wird basierend auf Middleware implementiert, und die Ausführungsmethode der Middleware muss auf dem Zwiebelmodell basieren. [Empfohlenes Lernen: „ nodejs-TutorialExpressKoaEgg.js,无论是哪个 Node.js 框架,都是基于中间件来实现的,而中间件的执行方式就需要依据洋葱模型。【推荐学习:《nodejs 教程》】

洋葱模型

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

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

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

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

Express

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

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

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

Ein tiefer Einblick in das Express-Framework in Node.js

一些 Features

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

Express 改造石头剪刀布游戏

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

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

Zwiebelmodell

Eine abstrakte Erklärung ist, dass man, um durch den Mittelpunkt der Zwiebel zu gelangen, zunächst Schicht für Schicht in die Zwiebelschale bis zum Mittelpunkt eindringen und dann Schicht für Schicht vom Mittelpunkt aus vorgehen muss . Beim Durchstechen der Epidermis an der Außenseite gibt es eine Besonderheit: Wie viele Schichten der Epidermis werden beim Eindringen durchdrungen, wie viele Schichten der Epidermis müssen beim Austritt durchdrungen werden. Es dringt zuerst in die Epidermis ein und verlässt sie dann. Diese Struktur entspricht dem First-In-Last-Out-Prinzip der Stapelstruktur.

Im Node.js-Framework können wir die Schale der Zwiebel als Middleware definieren:
  • Der Prozess der Eingabe des Mittelpunkts von außen nach innen ist das Schlüsselwort next( );
  • Von innen nach außen tritt jede Middleware nach der Ausführung in die nächste Middleware-Ebene ein, bis hin zur letzten Ebene.

Werfen wir einen kurzen Blick auf einige Express-Frameworks!

Express

Express Es handelt sich um ein Framework für HTTP-Dienste in Node.js. Der beste Weg, ein Framework zu verstehen, besteht darin, seine Schlüsselfunktionen

  • zu verstehen. Daraus lässt sich ableiten, welches Problem es lösen soll
  • Um seine Schlüsselfunktionen zu verstehen, können wir zuExpress-Website 🎜 Schauen Sie sich die Funktionen an. Diese Kernfunktionen sind alle darauf ausgelegt, es uns zu ermöglichen, HTTP bequemer und präziser zu schreiben. Service, wodurch unser Entwicklungsaufwand erheblich reduziert wird und wir schnell arbeiten können mit der Entwicklung beginnen. 🎜🎜Ein tiefer Einblick in das Express-Framework in Node.js🎜🎜Einige Funktionen: 🎜
    • Routing: Trennen Sie die entsprechenden Routen als Module für die Verarbeitung
    • Anfrage/Antwort Attribute Die Vereinfachung ermöglicht es uns, die entsprechenden Attribute direkt ohne Konvertierung zu verwenden.
      • Anfrage: Pfadname, Abfrage usw.
      • Antwort :send(), json(), jsonp() usw.
    • Middleware ( next())
      • Bessere Organisation des Prozesscodes
      • Asynchronität wird das Zwiebelmodell von Express
      • zerstören >
    • ul>

    Express modifizierte Stein-Papier-Schere game span>

    🎜Nun durch die Verwendung des Express-Frameworks zur Transformation des Stein-Papier-Schere-Spiels, des Codes des game.js-Spielmoduls und Wenn sich die Seite index.html nicht geändert hat, können Sie zu
    github gehen 🎜 oben klonen. 🎜🎜index.js Express-Transformation, Sie müssen zuerst express mit npm installieren: 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);
    Nach dem Login kopieren
    🎜🎜Code-Adresse: https://github.com/V-vincent/node-introduction🎜🎜🎜Weitere Programmierkenntnisse finden Sie unter: 🎜Programmiervideo🎜! ! 🎜

    Das obige ist der detaillierte Inhalt vonEin tiefer Einblick in das Express-Framework in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:juejin.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage