ホームページ ウェブフロントエンド jsチュートリアル Node.js のルーティングとミドルウェアの詳細な紹介

Node.js のルーティングとミドルウェアの詳細な紹介

Jun 15, 2018 pm 02:41 PM
nodejs ミドルウェア

この記事では、node.js でのルーティング、ミドルウェア、GE リクエストおよびポストリクエストのパラメーターの使用方法をまとめています。必要な方は参考にしてください。ルーティングです

サーバーは、異なる URL やリクエストに応じて異なる操作を実行する必要があります 2. ルーティングを実装する方法

2.1. URL へのアクセスをリクエストするとき、get は何をしますか?

2.2. 投稿が URL へのアクセスをリクエストした場合の対処方法

 app.get("网址",function(req,res){
  
 });
ログイン後にコピー

2.3. この URL へのアクセスリクエスト

 app.post("网址",function(req,res){
  
 });
ログイン後にコピー

注: 1. ここの URL は大文字と小文字を区別しません、例えば

 app.all("网址",function(){
  
 });
ログイン後にコピー

2. あなたはルーティングしますto / a 、actual/a?id=2&sex=nan も処理できます。

3. ルーティングにおける正規表現の使用

3.1. 正規表現では、不明な部分が括弧でグループ化されており、req.params[0], [1] を使用して取得できます。 req.params 配列オブジェクト。

 app.get("/AAb",function(req,res){        //我们访问  /aab也是可以的
  res.send("你好");
 });
ログイン後にコピー

3.2. コロンの書き方(推奨)

 app.get(/^\/student\/([\d]{10})$/,function(req,res){
  res.send("学生信息,学号" + req.params[0]);
 });
ログイン後にコピー

実行結果:

コロン 1:

コロン 2:

2. ミドルウェア

1.ミドルウェアとは

です。たとえば、上記の get リクエストと post リクエストはミドルウェアです

2. Express 内のすべてのルート (ミドルウェア) の順序 (非常に重要)

2.1. next() メソッド

var express=require('express');
var app=express();
//冒号1
app.get("/student/:id",function (req,res) {
 var id=req.params["id"];                    //得到id的值
 var reg=/^[\d]{6}$/;
 if(reg.test(id)){
  res.send(id);
 }else {
  res.send("请检查格式");
 }

});
//冒号2
app.get("/:username/:oid",function(req,res){
 var username = req.params["username"];            //得到username的值
 var oid = req.params["oid"];                  //得到//oid的值
 res.write(username);
 res.end(oid);
});
app.listen(3000);
ログイン後にコピー

2.2. シーケンスの競合: 次の 2 つのルートは関係がないように見えますが、実際には、admin がユーザー名ログインまたは ID として使用できるため競合しています

var express=require("express");
var app=express();
app.get("/",function (req,res,next) {
 console.log(1);
 next();    //如果没有next参数,就只会conlose出来1,而不会是1,2
});
app.get("/",function (req,res) {
 console.log(2);
});
 app.listen(3000);
ログイン後にコピー

実行結果: 172.0.0.1 にアクセスした場合: 3000/admin/ ログインすると、管理者ログインではなく、ユーザー情報 admin のみが出力されます

2.3. 順序の競合を解決します

2.3.1. 具体的なものを上に書き、抽象的なものを下に書きます

var express=require("express");
var app=express();
app.get("/:username/:id",function(req,res){
  console.log("1");
  res.send("用户信息" + req.params.username);
});

app.get("/admin/login",function(req,res){
  console.log("2");
  res.send("管理员登录");
});
app.listen(3000)
ログイン後にコピー

: 172.0 にアクセスすると、0.1: 3000/admin/login の場合、出力はユーザー情報 admin ではなく管理者ログインです

2.3.2. データベースの取得

var express=require("express");
var app=express();
//具体的
app.get("/admin/login",function(req,res){
  console.log("2");
  res.send("管理员登录");
});
//抽象的
app.get("/:username/:id",function(req,res){
  console.log("1");
  res.send("用户信息" + req.params.username);
});
app.listen(3000)
ログイン後にコピー

3. app.use() ミドルウェア: get および post とは異なります。 、その URL は完全に一致しません。ただし、小さなフォルダーを使用して展開することはできます。

3.1. get.use() のファジーマッチング

var express=require("express");
var app=express();
app.get("/:username/:id",function (req,res,next) {
  var username=req.params.username;
  //检索数据库,如果username 不存在,那么next()
 if(检索数据库){
  console.log("1");
  res.send("用户信息")
 }else{
  next();
 }
});
app.get("/admin/login",function (req,res) {
 console.log("2");
 res.send("管理员登录");
});
app.listen(3000)
ログイン後にコピー

3.2. get.use() でファイルを読み取る

4. Res.send() メソッドを使ってページを素早くテストする

var express=require("express");
var app=express();
//匹配所有网址
//法一
//当你不写路径的时候,实际上就相当于“/”,就是所有网址
// app.use(function (req,res,next) {
//  console.log(new Date());
//  next();     //执行下面的
// });
//法二
app.use("/",function (req,res,next) {
 console.log(new Date());
 next();     //执行下面的
});
//匹配/admin所有地址,例如/admin/ss/aa这个都行
app.use("/admin",function (req,res) {
 res.write(req.originalUrl+"\n"); // /admin/ss/aa
 res.write(req.path+"\n");   // /ss/aa
 res.write(req.baseUrl+"\n");  // /admin
 res.end("你好");
});
app.listen(3000);
ログイン後にコピー

4.2 では、 res.render() はビュー内のテンプレート ファイルに従ってコンテンツをレンダリングします。 viewsフォルダーを使用せず、フォルダー名を自分で設定したい場合は、 app.set("views","aaaa");

var express=require("express");
var fs=require("fs");
var app=express();

//当你不写路径的时候,实际上就相当于“/”,就是所有网址
app.use(haha);  //haha是一个函数
app.listen(3000);
// function haha(req,res) {
//  res.send("哈哈");
// }

app.use('/admin',function (req,res) {
 res.send('管理员登录');
})
//根据当前的网址,读取punlic文件夹的文件
//如果有这个文件,就渲染这个文件
//如果没有这个文件,那么next()
function haha(req,res,next) {
 var filePath=req.originalUrl;
 //根据当前的网址,读取public文件夹的文件
 //如果有这个文件,那么渲染这个文件
 //如果没哟偶这个文件,那么next();
 fs.readFile("./public/"+filePath,function (err,data) {
  if(err){
   //文件不存在
   next(); //一定要写,不然处于挂起状态
   return;
  }
  res.send(data.toString());
 })
}
ログイン後にコピー

5. req.query: http://127.0を入力する場合.0.1:3000/? id=0&ag=9

var express=require("express");
var app=express();
//静态服务
app.use('/jingtai',express.static("./public"));

//新的路由
app.get('/images',function (req,res) {
 res.send("哈哈")
});
//会自动识别err参数,如果有,那么就这个函数能捕获err
app.use(function (req,res) {
 res.status(404).send("没有这个页面!");
})
app.listen(3000);
ログイン後にコピー

動作結果:

3. リクエストパラメータの取得:

リクエストパラメータの取得: URL、Expressでは必要ありません。 URLモジュールを使用します。 req.query オブジェクトを直接使用できます。

POST リクエスト パラメーター: Express で直接取得することはできません。body-parser モジュールを使用する必要があります。使用後は、req.body を使用してパラメーターを取得できます。ただし、フォームにファイルのアップロードが含まれている場合は、依然として強力なモジュールを使用する必要があります。

var express=require("express");
var app=express();

// //设置ejs文件夹名字  //在day3文件夹下新建文件夹a,然后在里面放ejs文件
// app.set("views","a")
app.set("view engine","ejs");
app.get("/",function(req,res) {
 res.render("haha",{news:[]});

});

app.get("/check",function (req,res) {
 res.send({
  "user":"ok"
 })
})
app.listen(3000);
ログイン後にコピー
var express=require("express");
var app=express();
app.get("/",function (req,res) {
 console.log(req.query);
 res.send();
});
app.listen(3000);
ログイン後にコピー

実行結果:

以上は、皆様の参考になれば幸いです。

関連記事:

Vue で ajax を使用する方法には何がありますか?

vue.js でデータ分散スロットを実装する方法

Angular2 を使用してプラグインを統合する方法 (詳細なチュートリアル)

JavaScript 配列をフラット化するにはどうすればよいですか?

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Nodejs はバックエンド フレームワークですか? Nodejs はバックエンド フレームワークですか? Apr 21, 2024 am 05:09 AM

Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機能を備えているため、バックエンド フレームワークとして使用できます。

Nodejsをmysqlデータベースに接続する方法 Nodejsをmysqlデータベースに接続する方法 Apr 21, 2024 am 06:13 AM

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを実行します。最後に connection.end() を使用して接続を終了します。

Nodejsのグローバル変数とは何ですか Nodejsのグローバル変数とは何ですか Apr 21, 2024 am 04:54 AM

Node.js には次のグローバル変数が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環境変数: __dirname、__filename、__line、__column 定数: unknown、null、NaN、Infinity、-Infinity

Nodejs インストール ディレクトリ内の npm ファイルと npm.cmd ファイルの違いは何ですか? Nodejs インストール ディレクトリ内の npm ファイルと npm.cmd ファイルの違いは何ですか? Apr 21, 2024 am 05:18 AM

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項: Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

NodejsとJavaの間に大きな違いはありますか? NodejsとJavaの間に大きな違いはありますか? Apr 21, 2024 am 06:12 AM

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。

Nodejs はバックエンド開発言語ですか? Nodejs はバックエンド開発言語ですか? Apr 21, 2024 am 05:09 AM

はい、Node.js はバックエンド開発言語です。これは、サーバー側のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

NodejsとJavaのどちらを選択しますか? NodejsとJavaのどちらを選択しますか? Apr 21, 2024 am 04:40 AM

Web 開発において Node.js と Java にはそれぞれ長所と短所があり、どちらを選択するかはプロジェクトの要件によって異なります。 Node.js はリアルタイム アプリケーション、迅速な開発、マイクロサービス アーキテクチャに優れており、Java はエンタープライズ グレードのサポート、パフォーマンス、セキュリティに優れています。

Nodejsプロジェクトをサーバーにデプロイする方法 Nodejsプロジェクトをサーバーにデプロイする方法 Apr 21, 2024 am 04:40 AM

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

See all articles