ノードのチュートリアル-Expressフレームワークの簡単なチュートリアル

Expressフレームワーク学習

(はじめに)フレームワークの紹介

これも開発フレームワークであり、サードパーティのモジュールです。このフレームワークを使用すると、簡単にWebサイトサーバーを作成できます。

その機能を見てみましょう:1.便利で簡潔なルート定義を提供します2. HTTP要求パラメーターを取得する処理を簡素化します3.動的HTMLページをレンダリングしやすいテンプレートエンジンを高度にサポートします4.ミドルウェアを提供しますこのメカニズムは、HTTPリクエスト(リクエストのインターセプト)を効果的に制御します。5.機能を拡張するための多数のサードパーティミドルウェアがあります。

実際、フレームワークはいくつかのAPIであり、学習フレームワークはそのAPIを学習して理解することです

ネイティブルーティングとリクエストパラメータを取得する処理実装方法を比較する

  • 始めるのは簡単
  1. まず、npmをダウンロードします
 npm install express
  1. Expressモジュールを導入すると、ExpressコアAPIの1つであるコンストラクターが返されます
const express = require('express');
  1. サーバーを作成し、ポートをリッスンします
  2. ルートを作成してリクエストを受け入れる
// 引入express框架
const express = require('express'); //返回的值 是一个方法!
// 创建网站服务器
const app = express();

app.get('/', (req, res) => {
    // send()
    // 1. send方法内部会检测响应内容的类型
    // 2. send方法会自动设置http状态码
    // 3. send方法会帮我们自动设置响应的内容类型及编码
    res.send('Hello. Express');
})

app.get('/list', (req, res) => {
    res.send({ name: '张三', age: 20 })
})

// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

(2)ミドルウェア

ミドルウェアとは?これは、要求を率直に前処理するための一連のメソッドです。複数のミドルウェアを設定して同じデータストリームを処理でき、それらのミドルウェアは実行処理順序が異なります。ミドルウェアは単なるバルブです!

ミドルウェアの構成

主に2つの部分があります:Expressによって提供されるメソッド、2番目は処理関数(コールバック)です。主に次の

文法構造

 app.get('/request', (req, res, next) => {
     req.name = "张三";
//next方法就是是否允许把请求传递给下一个处理中间件,直到结束

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

app.userミドルウェア

これはミドルウェアであり、特別であり、リクエスト方法を区別しません。すべてのミドルウェアの前に配置する必要があります。次は非常に重要です!彼はコントローラーを引き渡すことができます。次に書いた場合、スタックします。

文法の例

// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();

// 接收所有请求的中间件
// app.use 接收请求, 但是不指定请求方式get或者poset,只要哟请求就有这个东西,如何next传递走
app.use((req, res, next) => {
    console.log('请求走了app.use中间件');
    next()
})

// 这里我们的第一个请求做了 规定,当客户端访问/request请求的时候走当前中间件
app.use('/request', (req, res, next) => {
    console.log('请求走了app.use / request中间件')
    next()
})

// 如果你访问的list那么值钱的user use('/request', (req, res, next)就不会走了
app.get('/list', (req, res) => {
    res.send('/list')
})

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

app.get('/request', (req, res) => {
    res.send(req.name)
})

// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');


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

非常に広く使用されています:

ルートガード、ルート保護。ログインが必要なページにクライアントがアクセスすると、最初にミドルウェアにユーザーのログインステータスを判断させることができます。ユーザーがログインしていない場合、リクエストは傍受され、ユーザーはログインが必要なページに直接アクセスできなくなります。

ウェブサイトメンテナンスのお知らせでは、すべてのルートの最上位ですべてのリクエストを受信して​​クライアントに直接応答するミドルウェアを定義しています。ウェブサイトはメンテナンス中です。

カスタム404ページ

サンプルコードブ​​ロック

// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();

// // 网站公告
// app.use((req, res, next) => {
//     res.send('当前网站正在维护...')
// })

//只要你想访问管理页面,就拦截下来 判断你是否登录登录了就放开你,没有的话,就戒掉你
app.use('/admin', (req, res, next) => {
    // 用户没有登录
    let isLogin = true;
    // 如果用户登录
    if (isLogin) {
        // 让请求继续向下执行
        next()
    } else {
        // 如果用户没有登录 直接对客户端做出响应
        res.send('您还没有登录 不能访问/admin这个页面')
    }
})

app.get('/admin', (req, res) => {
    res.send('您已经登录 可以访问当前页面')
})

// 这里的逻辑就是:如果你所有的路由页面都没有匹配到就过来这里,告你没有找到对应的资源
app.use((req, res, next) => { //app.use就是指定匹配路由
    // 为客户端响应404状态码以及提示信息
    res.status(404).send('当前访问的页面是不存在的')
})

// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');


エラー処理ミドルウェア

プログラムの実行プロセスでは、ファイルの読み取りエラーやデータベース接続エラーなど、いくつかの予期しないエラーが必ず発生します。エラー処理ミドルウェアは、エラーが集中的に処理される場所です。他の場所からスローされたエラーを受け取ります

プログラムでエラーが発生すると、next()メソッドが呼び出され、エラー情報がパラメーターの形でnext()メソッドに渡され、エラー処理ミドルウェアがトリガーされます。

エラー処理ミドルウェアを定義する方法は?

  • 失われた一般的なエラーと、Promise Apiをサポートする非同期コードをキャプチャして処理ミドルウェアにスローする方法を教えてください。
// 引入express框架
const express = require('express');
const fs = require('fs');
// 创建网站服务器
const app = express();
//注意!我们的错误有两种,一种是同步的错误,一种是异步的错误,处理方式是不一样的。异步错误可以
//通过回调函数捕获,也可以通过try catch捕获。但是这个不能捕获其他的api
app.get('/index', (req, res, next) => {
    // throw new Error('程序发生了未知错误')
    fs.readFile('./01.js', 'utf8', (err, result) => {
        if (err != null) {
            next(err)//这个就是异步的解决方式 如果发生了错误就把这个erro传出去给错误处理中间件
        } else {
            res.send(result)
        }
    })
    // res.send('程序正常执行')
})

// 错误处理中间
app.use((err, req, res, next) => {
    res.status(500).send(err.message);
})

// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');

  • 非同期関数エラーをキャッチする方法は?そして、処理、他のエラーをキャッチできないことに注意してください

// 引入express框架
const express = require('express');
const fs = require('fs');

const promisify = require('util').promisify;

// 这个的把原理的方法包装了起来,放回一个方法
const readFile = promisify(fs.readFile);
// 创建网站服务器
const app = express();

app.get('/index', async(req, res, next) => {
    try {
        await readFile('./aaa.js')
    } catch (ex) {
        next(ex); //把这个错误传递走
    }
})

// 错误处理中间
app.use((err, req, res, next) => {
    res.status(500).send(err.message);
})

// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');


(3)ルーティング

モジュラールーティングを構築するための基本的なコード

ルートを分離したいのですが、一部のページのビジネス処理ロジックは別のルートです

簡単な作成

// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();
// 创建路由对象
const home = express.Router();
// app.use是一个中间件
// 为路由对象匹配请求路径
app.use('/home', home);
// 创建二级路由
home.get('/index', (req, res) => {
    res.send('欢迎来到博客首页页面')
})

// 端口监听
app.listen(3000);

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

これはルーティングを分離するメインコードを指します

  • hoem.jsルーティング
const express = require('express');

const home = express.Router();

home.get('/index', (req, res) => {
	res.send('欢迎来到博客首页页面')
});

module.exports = home;
  • admin.jsルーティング
const express = require('express');

const admin = express.Router();

admin.get('/index', (req, res) => {
	res.send('欢迎来到博客管理页面')
});

module.exports = admin;

  • app.jsルーティング
// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();

const home = require('./route/home');
const admin = require('./route/admin');
// 配置模块化路由

app.use('/home', home);
app.use('/admin', admin);


// 端口监听
app.listen(3000);

(4)要求されたデータの処理

2つの比較、1つはネイティブ実装、もう1つはフレームワーク実装

getリクエストパラメータを取得する方法

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

文法構造

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



リクエスト後のパラメータを取得する方法

Expressでポストリクエストパラメータを受信するには、サードパーティのパッケージボディパーサーの助けが必要です

文法構造


 // 引入body-parser模块
 const bodyParser = require('body-parser');
 
 // 配置body-parser模块,拦截所有请求,会把请求转化为对象,然后给这日些对象添加一个属性这个属性叫body。这个extended:false参数是false的时候说明 先用queryString系统模块对参数处理一遍。true的时候使用名为QS的第三方模块 把请求转化为对象
//  bodyParser.urlencoded({ extended: false })放回的一个函数
 
 app.use(bodyParser.urlencoded({ extended: false }));
 // 接收请求
 app.post('/add', (req, res) => {
    // 接收请求参数
    console.log(req.body);
 }) 


app.use()のパラメーターは関数です〜

確認コード


// 引入express框架
const express = require('express');
const bodyParser = require('body-parser');
// 创建网站服务器
const app = express();
// 这个是一个对象,里面是的a是2 {a :2}
app.use(fn({ a: 2 })) //user可以直接使用函数

function fn(obj) {
    return function(req, res, next) {
        if (obj.a == 1) {
            console.log(req.url)
        } else {
            console.log(req.method)
        }
        next() //移交控制权
    }
}

//路由
app.get('/', (req, res) => {
    // 接收post请求参数
    res.send('ok')
})

// 端口监听
app.listen(3000);

ルーティングパラメータ(これもリクエスト処理分析機能です)

これは使いやすく、特にgetのパラメーターを処理するために使用されます

これはnbを比較するものであり、リクエストパラメータでもあります


// 引入express框架
const express = require('express');
const bodyParser = require('body-parser');
// 创建网站服务器
const app = express();

// 这额: id: name实际上是一个占位符号
app.get('/index/:id/:name/:age', (req, res) => {
    // 接收post请求参数。这个属性 是expers框架下的构建的,parmas存储的就是一个值对象

    res.send(req.params) // 你拿到的是{ id:123 ,name:laoli,age:18 }
})

//你的发送格式: localhost:3000/index/123/laoli/18
// 端口监听
app.listen(3000);

(V.リソース)静的リソースアクセス機能

おすすめ

転載: www.cnblogs.com/BM-laoli/p/12673929.html