nodejs(12)Expressミドルウェアmiddleware

6211 ワード

中間部品
クライアントの要求がサーバに到着した時、彼のライフサイクルはrequest--サーバー端処理--応答です.
サーバー側で処理する過程で、業務ロジックが複雑な時、開発とメンテナンスのために、処理することをいくつかのステップに分ける必要があります.ここでは各ステップは中間部品で、データは中間部品の操作対象です.
定義:中間部品は処理関数です.ただ、この関数は特殊で、三つのパラメータが含まれています.それぞれreqres
注意:中間部品の方法における三つのパラメータ:
req:要求対象;レスポンス対象next:nextは関数で、next()は呼び出されて、次の中間部品を呼び出す方法を表します.
function(req,res,next){
    //...       
    next();
}
app.use(myrFun)は下の二つの前に書いてください.
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
ルーティング後または静的リソースを要求した後、応答を要求するライフサイクルは実質的に終了したため、この後に要求処理を加えることには意味がない.
app.useは中間部品をロードするものです.
テスト:
const express = require('express')

const app = express()

//         
app.use(function(req, res, next) {
  console.log('      ')
  req.a = 'aaa'
  next()
})

//             next(),              ,
app.use(function(req, res, next) {
  console.log('      ')
  res.b = 'bbb'
  next()
})

//         
app.use(function(req, res, next) {
  console.log('      ')
  console.log(req.a)
  console.log(res.b)
  //         
  res.send('        ')
})

app.listen(3001, function() {
  console.log('Express server is running at http://127.0.0.1:3001')
})
 
Expressフレームにおける中間部品の5種類の分類
アプリケーションレベルのミドルウェア:appにマウントされたミドルウェアnext;ルートレベルのミドルウェア:routerオブジェクトにマウントされたミドルapp.get('URL ', (req, res, next)=> {})エラーレベルのミドルウェア:コールバック関数には、4つのパラメータrouter.get('url ', (req, res, next)=>{})唯一内蔵のミドルウェア:app.use((err, req, res, next)=>{})第三者中間部品:非expressフレームで提供される場合、プログラマが手動でインストールして使用できる中間部品が必要です.express.static()解析上位フォームデータ第三者のbody-parserを使う
const express = require('express')

const app = express()

//             
const bodyParser = require('body-parser')
//             app  
app.use(bodyParser.urlencoded({extended: false  })) // app.use          

app.post('/adduser', (req, res) => {
  // req.body     ,     body-parser          
  res.json(req.body)
})


app.listen(3001, function() {
  console.log('Express server is running at http://127.0.0.1:3001')
})
自分で中間部品をシミュレートします.
const express = require('express')

const app = express()

const myBodyparse = require('./04myBodyparse')
//                 
app.use(myBodyparse)


app.post('/adduser', (req, res) => {
  res.send(req.body)
})

app.post('/updateuser', (req, res) => {
  res.send(req.body)
})

app.listen(3001, function() {
  console.log('Express server is running at http://127.0.0.1:3001')
})
04 myBody parse.js
const qs = require('querystring')

module.exports = function(req, res, next) {
  let dtStr = ''
  //           ,     data
  req.on('data', chunk => {
    dtStr += chunk
  })
  //       end   ,             
  req.on('end', () => {
    const result = qs.parse(dtStr)
    req.body = result
    console.log(req.body)
    next()
  })
}