Nodejs中間件

中間件概念

中間件的本質就是一個請求處理方法,咱們把用戶從請求到響應的整個過程分發到多箇中間件去處理,這樣作的目的是提升代碼的靈活性,動態可擴展的

  • 同一個請求所通過的中間件,都是同一個請求對象和響應對象javascript

  • 中間件函數中有三個基本參數, req、res、nextjava

    • req就是請求相關的對象,它和下一個中間件函數中的req對象是一個對象
    • res就是響應相關的對象,它和下一個中間件函數中的res對象是一個對象
    • next:它是一個函數,調用它將會跳出當前的中間件函數,執行中間件;若是不調用next,則整個請求都會在當前中間件卡住,而得不到返回。
注意:next的方法只是對中間件有用,對於其餘的代碼沒有什麼做用
複製代碼

1.1中間件的執行流程

1.2應用程序級別的中間件

萬能匹配(不關心任何請求路徑和請求方法)express

app.use(function(req,res,next){
    console.log('2')
    next();
});
複製代碼

只是以'/xxx/'開頭的bash

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

複製代碼

1.3路由級別的中間件

路由過多時,代碼很差管理。以大事件的代碼爲例,咱們定義了管理員角色的接口和普通遊客的接口,這些接口若是全寫在一個入口文件中(以下只是顯示了4個接口,若是是40個接口,就會很難讀了),是很很差維護的。 get:app

app.get('/',function(req,res,next){
    res.end('Hello World!');
})
複製代碼

post:dom

app.post('/',function(req,res,next){
    res.end('Hello World!');
})
複製代碼

put:函數

app.put('/user',function(req,res,next){
    res.end('Hello World!');
})
複製代碼

delete:post

app.delete('/user',function(req,res,next){
    res.end('Hello World!');
})
複製代碼

1.4錯誤處理中間件

app.use(function(err,req,res,next){
  consloe.error(err.stack);
  res.status(500).end('something broke');
})
複製代碼

1.5 內置中間件

1.6第三方中間件

  • body-parser
  • multer(post上傳文件中間件)
const express=require('express');

const path=require('path')
// Post文件上傳時,咱們須要使用multer中間件

const multer=require('multer');

const sr=require('string-random');
// 用來生成隨機字符串的包,string-random

// 對multer進行配置
// 設置文件保存位置
// 設置文件上傳名稱

let upload=multer(multer.diskStorage({
    storage:multer.diskStorage({
        // 用來設置存儲位置
    destination:(req,res,callback)=>{
        // 注意callback的參數1正常處理中必須是null
        //參數2爲地址須要採用絕對路徑的方式 
        callback(null,path.join(__dirname,'./upload'));
    },
    // filename設置文件名
    filename:(req,file,callback)=>{
        // file是文件信息
        // sr用來生成隨機的字符串,初始歸入的數值爲生成的字符串長度
        // 參數名須要設置name
        callback(null,sr(15)+file.originalname);
    }
    })
}));
let app=express();
// 設置時,須要在app.post參數2中設置upload.single()
app.post('/fileupload',upload.single('file'),(req,res)=>{
    console.log(req.file);
    res.end('ok');
});

app.listen(8888,()=>{
    console.log('8888.....');
})
複製代碼
相關文章
相關標籤/搜索