如下介紹來自官網:javascript
定義如何處理瀏覽器的請求html
var express = require('express') var app = express() // respond with "hello world" when a GET request is made to the homepage app.get('/', function (req, res) { res.send('hello world') })
Express是一個路由和中間件Web框架,其自身的功能不多,Express應用程序本質上是一系列中間件函數調用。
中間件的功能是能夠訪問請求對象(req
),響應對象(res
)和應用程序的請求-響應週期中的下一個中間件功能的功能。下一個中間件功能一般由名爲的變量表示next
。
中間件功能能夠執行如下任務:java
若是當前的中間件功能沒有結束請求-響應週期,則必須調用next()
將控制權傳遞給下一個中間件功能。不然,該請求將被掛起。
node
Express可使用如下類型的中間件:express
express.Router()
。next
對象,也必須指定它以維護簽名。不然,next
對象將被解釋爲常規中間件,而且將沒法處理錯誤。)在運行期間,模板引擎將靜態模板中的變量替換爲運行期間產生的真實數據,並轉換爲html文件返回給客戶端,這樣使html的設計更加簡單。
與Express配合使用的一些流行模板引擎是Pug,Mustache和EJS。Express默認使用Jade。npm
Express帶有默認的錯誤處理程序,不須要任何額外的工做。若是同步代碼引起錯誤,則Express將捕獲並處理該錯誤。例如:json
app.get('/', function (req, res) { throw new Error('BROKEN') // Express will catch this on its own. })
在上一個章節中,分析了原生js書寫一個簡單的node服務器,很是的複雜麻煩。
使用express框架快速的構建一個上章節的Node服務。segmentfault
<form action="http://localhost:8080/api" method="post" enctype="multipart/form-data"> 用戶:<input type="text" name="user"><br> 密碼:<input type="password" name="pwd"><br> <input type="file" name="file" multiple><br> <input type="submit" value="提交"> </form>
使用express內置中間件static,以下請求靜態資源的時候express會從www尋找並返回api
server.use(express.static('./www'));
安裝body-parser
瀏覽器
npm i body-parser -D
引入body-parser
插件,response的請求頭中會自動新增body變量將body解析。
const body = require('body-parser'); //接收除文件外的body server.use(body.urlencoded({extended: false}));
安裝multer
npm i multer -D
引入multer
插件,設置上傳路徑爲./upload
,文件自動上傳到upload目錄,response的請求頭中會新增files
變量存儲相關信息。
const multer = require('multer'); // 接收文件body let multerObj = multer({dest: './upload'}); server.use(multerObj.any());
const express = require('express'); const body = require('body-parser'); //接收除文件外的body const multer = require('multer'); // 接收文件body let server = express(); server.listen(8080); // 中間件,用use吧服務加到中間件上,每一箇中間件加的方式看官網定義 server.use(body.urlencoded({extended: false})); let multerObj = multer({dest: './upload'}); server.use(multerObj.any()); // 處理請求 server.get('/', (req, res) => { res.send('OK'); }); server.post('/api', (req, res) => { res.send('OK'); // 原生和express都沒有req.body,是中間件加上的body console.log(req.body); console.log(req.files); }); // static,意思是請求靜態資源的時候express會處理 server.use(express.static('./www'));
req.body
就正確解析,req.files
裏面包含了上傳的文件信息,而且已經作好了文件名哈希。