由於在vue.js仿餓了麼app中,用到了express路由,因此就學習了express的簡單使用,而且記錄此文章,來加深本身的印象。html
安裝而且將express保存到依賴列表裏面vue
npm install express --save
只是安裝不添加到依賴列表裏面,省了--save便可web
npm install express
var express = require('express'); var app = express(); app.get('/user',function(req,res) { res.end('hello word'); }) var server = app.listen(3000, function () { var host = server.address().address; //ip地址 var port = server.address().port; //端口號 console.log('Example app listening at', host, port); });
上面的代碼中引入了express,而且實例化了一個app變量,初始化了一個get請求是http://localhost:3000/user請求,這個請求返回的是hello word,這個是一個簡單的路由正則表達式
路由是指如何定義應用的端點(URIs)以及如何響應客戶端的請求。express
app.METHOD(path, [callback...], callback),npm
app 是 express 對象的一個實例,express()就是一個express的實例。json
METHOD 是一個 HTTP 請求方法,express定義了以下請求的方法:get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, 和 connect。api
path 是服務器上的路徑, 這個路徑是咱們本身定義的,即訪問的url;能夠是字符串,正則表達式。服務器
// get請求根路徑 app.get('/',function(req,res) {}) // get請求根路徑 /user app.get('/user',function(req,res) {}) // 匹配以user結尾的。 app.get('/.*user$/',function(req,res) {})
callback 是當路由匹配時要執行的函數,callback能夠有多個,callback的參數有req,res,當多個callback是有一個next參數的,若是隻有一個callback能夠省略next參數。app
app.get('/user/:id', function (req, res,next) { if(req.params.id==0){ next('route') } next(); },function (req,res) { res.send('Hello World!'); }); app.get('/user/:id', function (req, res) { res.end('Hello user!'); });
next()表示執行下一個回調函數,next('route'):略過下面的回調函數直接執行下一個路由。上面的例子,當咱們在頁面輸入http://localhost:3000/user/0
,輸出的是Hello user!,其餘的都是輸出res.send('Hello World!')
app.all是一個特殊的方法,使用app.all方法,對於任何method的請求都會執行。
app.use(express.static('js'));
在當前目錄下面有一個js文件,裏面有一個index.js和router.js,咱們啓動服務的時候,能夠直接訪問http://localhost:3000/index.js,這就是express的託管靜態資源
中間件(Middleware) 是一個函數,它能夠訪問請求對象(request object (req)), 響應對象(response object (res)), 和 web 應用中處於請求-響應循環流程中的中間件,通常被命名爲 next 的變量。
應用級中間件綁定到 app 對象 使用 app.use() 和 app.METHOD(), 其中, METHOD 是須要處理的 HTTP 請求的方法,例如 GET, PUT, POST 等等,所有小寫。
例如:
//定義中間件 router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // 定義網站主頁的路由 router.get('/', function(req, res) { res.send('Birds home page'); }); // 定義 about 頁面的路由 router.get('/about', function(req, res) { res.send('About birds'); })
上面的例子中,router.use定義了一箇中間件,不管訪問根路由和about路由,都會執行中間件,中間件經過 next() 方法將控制權交給下一個中間件或者路由。
路由中間件和應用中間件同樣,只是路由中間件綁定的是express.Router();使用 router.use() 加載。
var app = express() var appData=require('../data.json'); var seller=appData.seller; //定義路由中間件 var appRouter=express.Router(); appRouter.get('/seller',function(req,res){ res.json({ errno:0, data:seller }) }) //加載路由中間件 app.use('/api',appRouter);
經過get方式訪問 http://localhost:2000/api/seller,就能訪問到返回的json對象,包含erron和data。