導入
- Express は、jquery や DOM と同様サーバーを迅速に構築するために使用されるサードパーティ モジュールです。
- Express は、Node.js プラットフォームに基づく、高速、オープン、 ミニマリストのWeb 開発フレームです。 。
- Express は http モジュールの基本的な API を保持しており、express を使用すると http API も使用できます。
- express は追加の新しいメソッドもカプセル化しているため、サーバーをより簡単に構築できるようになります。
Express 公式ウェブサイト
Express の中国語ドキュメント (非公式)
Express GitHub リポジトリ
ノードフレームワーク
node-http模块 ==⇒ express框架 ==⇒ koa =⇒ egg.js
インストール
npm i express
新しい速達梱包方法
- 急行
express.static()
– 静的リソースを開くexpress.urlencoded()
– POSTリクエストボディの取得
- アプリ
app.get()
– クライアントのGETリクエストを処理するapp.post()
– クライアントのPOSTリクエストを処理するapp.use()
– アプリケーションレベルの構成を設定する
- 要求
req.body
– POSTリクエストボディの取得req.params
– GETリクエストの動的パラメータを取得しますreq.query
– GETリクエストパラメータの取得(クエリ文字列パラメータの取得)
- レス
res.sendFile(文件的绝对路径)
– ファイルを読み取り、結果を応答しますres.set({name, value})
– 応答ヘッダーを設定するres.status(200)
– 応答ステータスコードを設定するres.send(字符串或对象)
– 回答結果res.json(对象)
– JSON形式の応答結果res.jsonp()
– JSONP形式の応答結果
Express では、引き続き http モジュールのメソッドを使用できることに注意してください。
単純なリクエストと複雑なリクエスト
簡単なリクエスト
次の条件を満たしている場合、単純なリクエストです。
- リクエストメソッドはGET、HEAD、POSTのみです。
- Content-Type の値は次のように制限されます。
- テキストプレーン
- マルチパート/フォームデータ
- application/x-www-form-urlencoded
複雑なリクエスト
機能:2 つのリクエストを送信
プリフライトリクエストが最初に送信されますOPTIONS
OPTIONS
クロスドメイン ヘッダー情報が許可されている場合、ブラウザは 2 番目のリクエストを送信します
Expressを使用したWebサーバーの構築
nodemon
サービスを開始します。
ステップ
- Expressモジュールをロードする
- エクスプレスサーバーを作成する
- サーバーを起動します
- ブラウザのリクエストをリッスンして処理する
// 1. 导入express模块
const express = require('express')
// 2. 创建服务器
const app = express()
// 3. 启动服务器
app.listen(3000, function () {
console.log('服务器启动成功')
})
// express 处理用户请求
// app.get() 用于处理用户的get请求
// app.post() 用于处理用户的post请求
app.get('/index',(req,res) => {
res.send('你好,新世界')
})
app.get('/login', (req,res) => {
res.send('<h1>哈哈</h1>')
})
// 更多的是返回一个数据(express自动把这个对象转化为JSON )
app.get('/user', (req,res) => {
res.send({
name: 'zs',
age: 18,
gender: '女'
})
})
getインターフェースを実装する
インターフェースサーバー:
ユーザーのリクエストに基づいてデータ(JSONデータ)を返す
シンプルな get インターフェイスを実装する
const express = require('express')
const app = express()
app.listen(3000, () => {
console.log('服务器启动成功了')
})
app.get('/login', (req, res) => {
// 允许该接口跨域访问 CROS
res.setHeader('Access-Control-Allow-Origin', '*') // *表示都可以跨域访问
res.send({
code: 200,
message: '成功'
})
})
クエリ文字列を取得する
クエリ文字列とは何ですか?
URL アドレスに続くのは次のとおりです。
使用req.query
クエリ文字列の取得
- インターフェース
const express = require('express')
const app = express()
app.listen(3000, () => {
console.log('服务器启动成功了')
})
app.get('/login', (req, res) => {
// 允许该接口跨域访问
res.setHeader('Access-Control-Allow-Origin', '*') // *表示都可以跨域访问
console.log(req.query)
const {
username, password} = req.query
if(username === 'admin' && password === '123456') {
res.send({
code: 200,
message: '成功'
})
} else {
res.send({
code: 400,
message: '用户名或密码错误'
})
}
})
取得したクエリ文字列は次のとおりです。
- ページ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text" placeholder="请输入用户名" class="username">
<br>
<input type="text" placeholder="请输入密 码" class="pwd">
<br>
<button>登录</button>
<script src="node_modules/axios/dist/axios.js"></script>
<script>
document.querySelector('button').onclick = async function () {
const username = document.querySelector('.username').value
const password = document.querySelector('.pwd').value
const res = await axios({
method: 'get',
url: 'http://localhost:3000/login',
params: {
username,
password
}
})
console.log(res)
}
</script>
</body>
</html>
動的パラメータを取得する
url/:id/:name/:age
: 以下は動的パラメータと呼ばれます
使用req.params
動的パラメータを取得する
app.get('/getUser/:id', (req, res) => {
// 允许该接口跨域访问
res.setHeader('Access-Control-Allow-Origin', '*')
console.log(req.params)
res.send({
id: req.params.id,
name: 'zs',
age: 10
})
})
インターフェイスのスタイル
現在最も人気があるのは、シンプルなインターフェイス スタイルである REST スタイルです。
パフォーマンス: ID は動的パラメータを使用して URL に直接結合されます
投稿リクエストを実装する
注: 投稿リクエストの Content-Type
は application/json
であるため、これは複雑なリクエストです。
ポストリクエストの送信ステップ
- すべてのオプション要求を処理する
app.options('*', (req, res) => {
// 允许CORS跨域的域名
res.setHeader('Access-Control-Allow-Origin', '*')
// 允许CORS跨域的请求方式,默认只有GET,POST
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE')
// 允许CORS跨域请求的请求头
res.setHeader('Access-Control-Allow-Headers', 'content-type')
res.send(null)
})
- 投稿リクエストを送信する
app.post('/login', (req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*')
res.send({
code: 200,
message: '登陆成功'
})
})
- 投稿リクエストのリクエストボディを取得したい場合
- 使用
req.body
- 組み込みミドルウェアを使用する必要がある
**express.json()
- 使用
app.use(express.json())
...
...
app.post('/login', (req, res) => {
res.setHeader('Access-Control-Allow-Origin', '*')
console.log(req.body)
res.send({
code: 200,
message: '登陆成功'
})
})
サーバーはさまざまなタイプのリクエスト本文を受信し、それらをさまざまな方法で使用します。
- URL コード化 —>
app.use(express.urlencoded({extended: false}));
- application/json —>
app.use(express.json());
– デモなし - form-data —> サーバーはサードパーティのモジュール処理を使用します (
multer
)
ミドルウェア
特殊業務処理プロセスにおける中間処理リンク
-
ミドルウェアは関数であり、通常はリクエストの前に記述されます。
-
基本パラメータは 3 つあります
- req リクエスト関連オブジェクト
- 応答応答関連オブジェクト
- next 関数 次 ミドルウェアを呼び出して継承する必要があります
const express = require('express') const app = express() // app.use(中间件) // 所有的请求之前都会调用中间件 const middle = function (req, res, next) { console.log('我是中间件') // 处理完一定要记得调用next next() } app.use(middle) app.listen(3000, () => { console.log('服务器启动了') }) app.get('/login', (req, res) => { res.send('登录') }) app.get('/user', (req, res) => { res.send('用户') }) app.get('/index', (req, res) => { res.send('首页') })
ミドルウェアを使用してクロスドメインの問題を解決する
ミドルウェアを宣言するAllowCrossDomain
const express = require('express')
const app = express()
// app.use(中间件) // 所有的请求之前都会调用中间件
const AllowCrossDomain = function (req, res, next) {
// 允许CORS跨域的域名
res.setHeader('Access-Control-Allow-Origin', '*')
// 允许CORS跨域的请求方式,默认只有GET,POST
res.setHeader('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE')
// 允许CORS跨域请求的请求头
res.setHeader('Access-Control-Allow-Headers', 'content-type')
// 处理完一定要记得调用next
next()
}
app.use(AllowCrossDomain)
app.listen(3000, () => {
console.log('服务器启动了')
})
app.post('/login', (req, res) => {
res.send({
code: 200,
message: '登陆成功'
})
})
app.get('/user', (req, res) => {
res.send('用户')
})
app.get('/index', (req, res) => {
res.send('首页')
})
高速組み込みミドルウェア
- 静的
静的リソース
// img是一个文件夹
// 直接把img作为公共的静态资源目录
app.use(express.static('img'))
- URLコード化された
- 対処する
application/x-www-form-urlencoded
- リクエストボディを req.body にハングします。
- json
- 対処する
application/json
- リクエストボディを req.body にハングします。
- 対処する
通常は2と3を同時に使用します
// 处理json数据
app.use(express.json())
// 处理form-urlencoded数据
app.use(express.urlencoded({
extended: false}))