Express
和Koa
是目前最主流的基於node
的web開發框架,他們的開發者是同一班人馬。貌似如今Koa
更加流行,緣由在於咱們能夠基於Koa
進行二次開發,這篇文章主要探討一下Express
。javascript
在這裏介紹一些經常使用的api:html
先引用express,而且執行java
let express = require('express');
let app = express();
app.listen(8080, () => {
console.log(8080)
});
複製代碼
app[method](path, function(req, res){})
根據請求路徑來處理客戶端發出的GET等各類請求。第一個參數path爲請求的路徑, 第二個參數爲處理請求的回調函數。node
app.get('/', function (req, res) {
res.end('ok');
});
複製代碼
app.use([path,] function [, function...])
中間件就是處理HTTP請求的函數,用來完成各類特定的任務,好比檢查用戶是否登陸、檢測用戶是否有權限訪問等。若是path
沒有寫,那麼默認就是"/",同時須要注意的是:中間件的執行是有順序的 web
app.use中放入的函數稱爲中間件函數,通常有三個特色:express
//使用use來定義一箇中間件 next也是一個函數,調用它則意味着當前的中間件執行完畢,能夠繼續向下執行別的中間件了
app.use(function (req, res, next) {
res.setHeader('Content-Type', 'text/html;charset=utf8');
console.log('沒有路徑的中間件');
//調用next的時候若是傳一個任意參數就表示此函數發生了錯誤,
//而後express就會跳事後面全部的中間件和路由
//交給錯誤處理中間件來處理
next('我錯了');
});
app.use('/user1', function (req, res, next) {
console.log('user1')
next()
});
app.use('/user2', function (req, res, next) {
console.log('user2')
res.end('user2');
});
//錯誤處理中間件有四個參數
app.use('/hello', function (err, req, res, next) {
res.end('hello ' + err);
});
複製代碼
若是中間出錯,它會直接找到錯誤處理中間件來進行處理。api
app.param(paramName, callback)
用來批量處理路徑中的參數數組
app.get('/username/:userid/:name', function (req, res) {
res.end(req.params.name+req.params.name);
});
app.param('userid',function(req,res,next,userid,name){
next();
})
複製代碼
app.set(key, val)
用來設置參數,例如渲染模板bash
app.set('views', path.resolve(path.join(__dirname, 'views')));
app.set('view engine', 'html');
複製代碼
app.engin()
規定文件用何種方式來進行渲染app
app.engine('html',html);
複製代碼
路由和中間件,須要有地方來保存這些信息,好比路由信息,好比中間件回調函數等等,express中有一個對象Router對象專門用來存儲中間件對象,他有一個數組叫stack,保存了全部的中間件對象,而中間件對象是Layer對象。
app.use([path,] function [, function...])
,
app.use([path,] function [, function...])
,
app.use
... 表明上圖左側的layer,而括號中的函數則表明了layer1,layer2,因此它們的執行順序應該是一層一層執行的。
關於Rouer
和 Route
的解析:
Route
對象的主要做用就是建立一個路由中間件,而且建立多個方法的layer
保存到本身的stack
數組中Router
對象的主要做用就是建立一個普通中間件或者路由中間件的引導者(引導Layer
對象連接到回一個route
對象),而後將其保存在本身的stack
數組中去。