検索

ノードミドルウェアとは

Dec 29, 2022 pm 03:42 PM
nodeミドルウェア

Node ミドルウェアとは、主に http リクエストの詳細をカプセル化する方法を指します。その本質は、特定の業務処理に入る前に特定のフィルターに処理させることです。Web アプリケーションの場合、Node ミドルウェアを導入することで、いくつかの基本的なロジック処理の詳細を簡素化し、カプセル化できます。 。

ノードミドルウェアとは

#このチュートリアルの動作環境: Windows 10 システム、ノード v12.21.0 バージョン、Dell G3 コンピューター。

ノードミドルウェアとは何ですか?

nodejs ミドルウェアの原理の詳細な紹介

はじめに

ミドルウェアはアプリケーション システムとシステムの間にあります。システムソフトウェア システムソフトウェアが提供する基本的なサービス(機能)を利用して、アプリケーションシステムの各部や異なるアプリケーションをネットワーク上で接続し、リソースの共有や機能の共有という目的を達成できるソフトウェアの一種です。

NodeJS における Middleware は、主に http リクエストの詳細処理をカプセル化する方法を指します。 http リクエストには、次のような多くのアクションが含まれることがよくあります。 IP フィルタリング クエリ文字列転送 リクエスト本文の解析 Cookie 情報の処理 権限チェック検証 ロギング セッション管理ミドルウェア (セッション) gzip 圧縮ミドルウェア (compress など) * エラー処理

もちろん、多くのカスタム処理アクションがあります。 ## アプリケーションでは、処理作業の詳細をすべて理解する必要はありませんが、開発効率を向上させるという目的を達成するためにビジネス開発に集中したいと考えているため、これらの基本的な処理を簡素化してカプセル化するために

Node Middleware を導入しました。ロジック処理の詳細。ノード ミドルウェア

本質的には、特定のビジネス処理に入る前に、

特定のフィルターを処理させます。以下の図に示すように:

現在主流の Nodejs フレームワーク (ノードミドルウェアとはconnect
、# など) ## koa

expresseggnest などはすべてミドルウェアの設計概念と切り離せないものであるため、誰もがNodejs をより深く覗き込む 世界中でミドルウェアの実装原理を比較研究してきました。本文ノードミドルウェアの概念を理解した後、手動でミドルウェアを実装し、最後に簡単に分析してみましょう koa におけるミドルウェアの実装アイデアを見てみましょう 記事の概要は次のとおりです:

ノードミドルウェアの基本原則の実装

koa ミドルキーの実装方法* koa ミドルウェアのメカニズムを使用して、独自の koa ミドルウェアを実装する

node ミドルウェアの核となる原則の実装上記の紹介から、ミドルウェアは http リクエストの最初から最後までの処理ロジックであることがわかります。レスポンスを処理する必要があります。通常、リクエストとレスポンスを処理する必要があります。ノードミドルウェアモードを実装する場合、考慮する必要がある問題の 1 つは、複数のミドルウェアの共存です。複数のミドルウェアの実行を自動化する方法を考える必要があります。それ以外の場合、リクエストからレスポンスまでのプロセスで最初のミドルウェアのみが実行されるため、基本的なミドルウェア形式は次のようになります:

const middleware = (req, res, next) => {
  // 请求处理逻辑  next()}

次に、ミドルウェアがどのように実行されるかを確認するための簡単なケースを作成してみましょう。

// 定义几个中间间函数const m1 = (req, res, next) => {
  console.log('m1 run')
  next()}const m2 = (req, res, next) => {
  console.log('m2 run')
  next()}const m3 = (req, res, next) => {
  console.log('m3 run')
  next()}// 中间件集合const middlewares = [m1, m2, m3]function useApp (req, res) {
  const next = () => {
    // 获取第一个中间件    const middleware = middlewares.shift()
    if (middleware) {
      middleware(req, res, next)
    }
  }
  next()}// 第一次请求流进入useApp()

上記のコードから、

next
の役割を見つけるのは難しくありません。これは、

m1 runm2 runm3 run
上記はミドルウェアの実行モードの基本的な実装ですが、非同期の問題も考慮する必要があります。検証、識別、その他のサービスなどのサードパーティ モジュールまたは API のサポートを行うには、次に非同期ミドルウェアのコールバックで実行する必要があります。次のコードに示すように、通常の呼び出し実行シーケンスを確認してください:
const m2 = (req, res, next) => {
  fetch('/xxxxx').then(res => {
    next()
  })}

ログミドルウェア、リクエスト監視ミドルウェアなどのミドルウェアシナリオもあり、これらは業務処理の前に処理され、関連するロジックは処理後に実行されます。

next
関数で二次処理を実行します。next の戻り値を
promise

にパッケージ化して、業務処理中に使用できるようにします。完了後、ミドルウェア ロジックの処理を続行します。 then コールバック。以下に示すように:

function useApp (req, res) {
  const next = () => {
    const middleware = middlewares.shift()
    if (middleware) {
      // 将返回值包装为Promise对象      return Promise.resolve(middleware(req, res, next))
    }else {
      return Promise.resolve("end")
    }
  }
  next()}
現時点では、次の方法で呼び出すことができます:
const m1 = (req, res, next) => {
  console.log('m1 start')
  return next().then(() => {
    console.log('m1 end')
  })}

上記では、基本的なミドルウェア設計パターンを実装しました。もちろん、async と await を使用して実装することもできます。記述方法はよりエレガントでシンプルになります。作成者による簡単な例を次に示します:

rreeee

在koa2框架中, 中间件的实现方式也是将next()方法返回值封装为Promise对象,实现了其提出的洋葱圈模型,如下图所示:

ノードミドルウェアとは

koa中间件实现方式

koa2框架的中间件实现原理很优雅,笔者觉得很必要研究一下, 这里展示一下其核心思路:

function compose (middleware) {
  // 提前判断中间件类型,防止后续错误  if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!')
  for (const fn of middleware) {
    // 中间件必须为函数类型    if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!')
  }
  return function (context, next) {
    // 采用闭包将索引缓存,来实现调用计数    let index = -1
    return dispatch(0)
    function dispatch (i) {
      // 防止next()方法重复调用      if (i 

利用koa中间件机制实现一个自己的koa中间件

学习了中间件的设计机制和原理, 我们是不是想马上写一个中间件呢? 笔者这里给大家举一个例子. 在H5-Dooring项目的服务端代码中, 我们需要对用户登录权限进行分发, 此时我们提供统一个中间件来处理, 如下代码所示:

// 模拟数据库操作const token = db.user();// router或者koa的中间件一定要用await处理next,否则将不能正常响应数据export default async (ctx, next) => {
  const t = ctx.request.header.authorization
  let uid = ctx.request.header['x-requested-with']
  let uidArr = uid.split(',')
  if(uidArr.length > 1) {
      uid = uidArr.pop().trim()
  }
    if(token[uid] && token[uid][1] === t) {
        await next()
    }else {
        ctx.status = 403;
        ctx.body = {
            state: 403,
            msg: '你没有权限操作'
        }
    }  }

以上代码即实现用户登录态处理, 如果用户在没有登录的情况下防问任何需要登录的接口, 都将返回权限不足或则在请求库中让其重定向到登录页面.

推荐学习:《node.js视频教程

以上がノードミドルウェアとはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
USESTATEの理解():React React Neact State Managementの包括的なガイドUSESTATEの理解():React React Neact State Managementの包括的なガイドApr 25, 2025 am 12:21 AM

usestate()isareacthookusedtomeStateinfunctionalComponents.1)itInitializeSandUpDatestate、2)colledatttheToplevelofComponents、3)canleadto'stalestate'ifnotusedly、and4)cancancancancancanbeoptimizeduptimizeduptimizedususecall -calleSuperesteSteSteSteSteSteSteSteSteStateSupteStateSuptateSuptatedates

Reactを使用することの利点は何ですか?Reactを使用することの利点は何ですか?Apr 25, 2025 am 12:16 AM

ReactisPopularduetoitsComponent Architecture、Virtualdom、Richecosystem、およびdeclarativenature.1)コンポーネントベースのarchitectureallowsforReusable anduipieces、改善様式および測定可能性。

Reactでのデバッグ:一般的な問題の特定と解決Reactでのデバッグ:一般的な問題の特定と解決Apr 25, 2025 am 12:09 AM

debugReactapplicationivivivity、EtheseStrategies:1)AddressPropdrillingWithContextapiorredux.2)HandLeasynchronousoperations withuthutateanduseeffect、Abortcontrollertopreventraceconditions.3)最適化合物を使用して、最適化合物を使用してください

ReactのUseState()とは何ですか?ReactのUseState()とは何ですか?Apr 25, 2025 am 12:08 AM

UseState()inReactallowsstateManagementInFunctionalComponents.1)itsimplifiesstateManagement、makeCodemoreconcise.2)usetheprevcountFunctionToupDateStateBasedTateBasedTateBadeStateValue、AvolidingStalestateSues.3)

useState()vs。usereducer():州のニーズに合った適切なフックを選択するuseState()vs。usereducer():州のニーズに合った適切なフックを選択するApr 24, 2025 pm 05:13 PM

ChooseuseState()forsimple,independentstatevariables;useuseReducer()forcomplexstatelogicorwhenstatedependsonpreviousstate.1)useState()isidealforsimpleupdatesliketogglingabooleanorupdatingacounter.2)useReducer()isbetterformanagingmultiplesub-valuesorac

UseState()を使用して状態を管理する:実用的なチュートリアルUseState()を使用して状態を管理する:実用的なチュートリアルApr 24, 2025 pm 05:05 PM

UseStateは、州の管理を簡素化し、コードをより明確にし、読みやすくし、Reactの宣言的な性質と一致するため、クラスコンポーネントやその他の州管理ソリューションよりも優れています。 1)UseStateを使用すると、状態変数を関数コンポーネントに直接宣言することができます。2)フックメカニズムの再レンダリング中に状態を覚えています。

UseState()を使用する時期と、代替の州管理ソリューションを検討するタイミングUseState()を使用する時期と、代替の州管理ソリューションを検討するタイミングApr 24, 2025 pm 04:49 PM

useUsestate()forlocalcomponentStatemanagement; compleartinative forglogic、orperformanceissues.1)useidealforsimple、localstate.2)useglobalStateSolutionSolutionSuxorContextForSharedState.3)OptForreDuxtormobxobxobxobforexSt

Reactの再利用可能なコンポーネント:コードの維持可能性と効率の向上Reactの再利用可能なコンポーネント:コードの維持可能性と効率の向上Apr 24, 2025 pm 04:45 PM

再利用することは、codecodemaintainabilityを抑制することを再生します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、