NodeJSフレームワークExpress

Express

要約内容は、この冬休みに自宅で勉強するためのPPTからのものです

1.Expressフレームワークの紹介と最初の経験

1.1Expressフレームワークとは

Expressは、ノードプラットフォームに基づくWebアプリケーション開発フレームワークであり、さまざまなWebアプリケーションの作成に役立つ一連の強力な機能を提供します。npm installexpressコマンドを使用してダウンロードできます。

1.2Expressフレームワークの機能

  • 便利で簡潔なルート定義方法を提供します
  • HTTPリクエストパラメータを取得するための簡略化された処理
  • テンプレートエンジンの高度なサポート、ダイナミックHTMLページのレンダリングが簡単
  • HTTPリクエストを効果的に制御するミドルウェアメカニズムを提供します
  • 機能を拡張するために多数のサードパーティミドルウェアを用意する

1.3ネイティブNode.jsとExpressフレームワーク間のルーティングの比較

 app.on('request', (req, res) => {
    
    
     // 获取客户端的请求路径
     let {
    
     pathname } = url.parse(req.url);
     // 对请求路径进行判断 不同的路径地址响应不同的内容
     if (pathname == '/' || pathname == 'index') {
    
    
        res.end('欢迎来到首页');
     } else if (pathname == '/list') {
    
    
        res.end('欢迎来到列表页页');
     } else if (pathname == '/about') {
    
    
        res.end('欢迎来到关于我们页面')
     } else {
    
    
        res.end('抱歉, 您访问的页面出游了');
     }
 });
 // 当客户端以get方式访问/时
 app.get('/', (req, res) => {
    
    
     // 对客户端做出响应
     res.send('Hello Express');
 });

 // 当客户端以post方式访问/add路由时
 app.post('/add', (req, res) => {
    
    
    res.send('使用post方式请求了/add路由');
 });

1.4リクエストパラメータを取得するためのネイティブNode.jsとExpressフレームワークの比較

 app.on('request', (req, res) => {
    
    
    // 获取GET参数
    let {
    
    query} = url.parse(req.url, true);
    // 获取POST参数
    let postData = '';
    req.on('data', (chunk) => {
    
    
        postData += chunk;
    });
    req.on('end', () => {
    
    
        console.log(querystring.parse(postData)
    })); 
 });
 app.get('/', (req, res) => {
    
    
    // 获取GET参数
    console.log(req.query);
 });

 app.post('/', (req, res) => {
    
    
    // 获取POST参数
    console.log(req.body);
 }) 

1.5Expressの最初の経験

Expressフレームワークを使用してWebサーバーを作成するのは非常に簡単で、Expressモジュールによって返される関数を呼び出すだけです。

 // 引入Express框架
 const express = require('express');
 // 使用框架创建web服务器
 const app = express();
 // 当客户端以get方式访问/路由时
 app.get('/', (req, res) => {
    
    
    // 对客户端做出响应 send方法会根据内容的类型自动设置请求头
    res.send('Hello Express'); // <h2>Hello Express</h2> {say: 'hello'}
 });
 // 程序监听3000端口
 app.listen(3000);

2.ミドルウェア

2.1ミドルウェアとは

ミドルウェアは一連のメソッドであり、クライアントからの要求の受信、要求への応答、または処理のために次のミドルウェアに要求を渡すことができます。

ミドルウェアは、主にミドルウェア方式とリクエスト処理機能の2つの部分で構成されています。
ミドルウェアメソッドは、リクエストのインターセプトを担当するExpressによって提供され、リクエスト処理機能は、リクエストの処理を担当する開発者によって提供されます。

 app.get('请求路径', '处理函数')   // 接收并处理get请求
 app.post('请求路径', '处理函数')  // 接收并处理post请求

同じリクエストに対して複数のミドルウェアを設定し、同じリクエストを複数回処理することができます。
デフォルトでは、リクエストは上から下の順にミドルウェアと照合されます。照合が成功すると、照合は終了します。
nextメソッドを呼び出して、要求を終了するミドルウェアが検出されるまで、要求の制御を次のミドルウェアに移すことができます。

 app.get('/request', (req, res, next) => {
    
    
     req.name = "张三";
     next();
 });
 app.get('/request', (req, res) => {
    
    
     res.send(req.name);
 });

2.2app.useミドルウェアの使用法

app.useはすべてのリクエストメソッドに一致し、リクエスト処理関数で直接渡すことができます。つまり、すべてのリクエストが受信されます。

 app.use((req, res, next) => {
    
    
     console.log(req.url);
     next();
 });

app.useの最初のパラメーターをリクエストアドレスに渡すこともできます。つまり、リクエストの方法が何であっても、リクエストがリクエストアドレスである限り、リクエストは受信されます。

 app.use('/admin', (req, res, next) => {
    
    
     console.log(req.url);
     next();
 });

2.3ミドルウェアアプリケーション

  • ルート保護。クライアントがログインする必要のあるページにアクセスすると、最初にミドルウェアを使用してユーザーのログインステータスを判断できます。ユーザーがログインしていない場合、クライアントはリクエストを傍受し、直接応答してユーザーのログインを禁止します。ログインする必要のあるページに入る。
  • Webサイトのメンテナンスアナウンスは、すべてのルートの最上位ですべての要求を受信し、クライアントに直接応答するミドルウェアを定義します。Webサイトはメンテナンス中です。
  • カスタム404ページ

2.4ミドルウェアの処理エラー

プログラム実行の過程で、ファイルの読み取りの失敗やデータベース接続の失敗など、予期しないエラーが必然的に発生します。
エラー処理ミドルウェアは、エラーが一元的に処理される場所です。

 app.use((err, req, res, next) => {
    
    
     res.status(500).send('服务器发生未知错误');
 })

プログラムでエラーが発生した場合は、next()メソッドを呼び出し、エラー情報をパラメーターの形式でnext()メソッドに渡して、エラー処理ミドルウェアをトリガーします。

 app.get("/", (req, res, next) => {
    
    
     fs.readFile("/file-does-not-exist", (err, data) => {
    
    
         if (err) {
    
    
            next(err);
         }
     });
});

2.5キャッチエラー

node.jsでは、非同期APIのエラー情報はコールバック関数を介して取得され、Promiseオブジェクトをサポートする非同期APIはcatchメソッドでキャッチできます。
非同期関数の実行でエラーが発生した場合、エラーをキャッチするにはどうすればよいですか?
try catchは、非同期関数や他の同期コードの実行中に発生するエラーをキャッチできますが、他のタイプのAPIで発生するエラーはキャッチできません。

 app.get("/", async (req, res, next) => {
    
    
     try {
    
    
         await User.find({
    
    name: '张三'})
     }catch(ex) {
    
    
         next(ex);
     }
 });

3.エクスプレスリクエスト処理

3.1モジュラールーティングの構築

 const express = require('express') 
 // 创建路由对象
 const home = express.Router();
 // 将路由和请求路径进行匹配
 app.use('/home', home);
  // 在home路由下继续创建路由
 home.get('/index', () => {
    
    
          //  /home/index
         res.send('欢迎来到博客展示页面');
 });

または:

 // home.js
 const home = express.Router(); 
 home.get('/index', () => {
    
    
     res.send('欢迎来到博客展示页面');
 });
 module.exports = home;
 // admin.js
 const admin = express.Router();
 admin.get('/index', () => {
    
    
     res.send('欢迎来到博客管理页面');
 });
 module.exports = admin;
 // app.js
 const home = require('./route/home.js');
 const admin = require('./route/admin.js');
 app.use('/home', home);
 app.use('/admin', admin);

3.3GETパラメータの取得

Expressフレームワークでは、req.queryを使用してGETパラメーターを取得できます。フレームワークは、GETパラメーターをオブジェクトに変換して返します。

 // 接收地址栏中问号后面的参数
 // 例如: http://localhost:3000/?name=zhangsan&age=30
 app.get('/', (req, res) => {
    
    
    console.log(req.query); // {"name": "zhangsan", "age": "30"}
 });

3.4POSTパラメーターの取得

ExpressでPOSTリクエストパラメータを受信するには、サードパーティのパッケージbody-parserを使用する必要があります。

 // 引入body-parser模块
 const bodyParser = require('body-parser');
 // 配置body-parser模块
 app.use(bodyParser.urlencoded({
    
     extended: false }));
 // 接收请求
 app.post('/add', (req, res) => {
    
    
    // 接收请求参数
    console.log(req.body);
 }) 

3.5Expressルーティングパラメータ

 app.get('/find/:id', (req, res) => {
    
     
     console.log(req.params); // {id: 123} 
 });

localhost:3000 / find / 123

3.6静的リソースの処理

img、CSS、JavaScriptファイルなどの静的ファイルは、Expressに組み込まれているexpress.staticによって便利にホストできます。

 app.use(express.static('public'));

これで、パブリックディレクトリの下のファイルにアクセスできます。

  • http:// localhost:3000 / images / kitten.jpg
  • http:// localhost:3000 / css / style.css
  • http:// localhost:3000 / js / app.js
  • http:// localhost:3000 / images / bg.png
  • http:// localhost:3000 / hello.html

4.express-art-templateテンプレートエンジン

4.1テンプレートエンジン

アートテンプレートテンプレートエンジンがExpressフレームワークとより適切に連携できるようにするために、テンプレートエンジンは、元のアートテンプレートテンプレートエンジンに基づいて、エクスプレスアートテンプレートを公式にカプセル化します。
npm install art-templateexpress-art-templateコマンドを使用してインストールします。

  // 当渲染后缀为art的模板时 使用express-art-template
 app.engine('art', require('express-art-template'));
  // 设置模板存放目录
 app.set('views', path.join(__dirname, 'views'));
  // 渲染模板时不写后缀 默认拼接art后缀
 app.set('view engine', 'art');
 app.get('/', (req, res) => {
    
    
     // 渲染模板
     res.render('index');
 }); 

4.2app.localsオブジェクト

app.localsオブジェクトの下に変数を設定します。このデータは、すべてのテンプレートで取得できます。

 app.locals.users = [{
    
    
     name: '张三',
     age: 20
 },{
    
    
     name: '李四',
     age: 20
}]

おすすめ

転載: blog.csdn.net/jal517486222/article/details/109628698