1. 程式人生 > >node學習之express: 路由

node學習之express: 路由

一.基礎部分

本文使用的express-generator生成的專案

1.路由方法

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。

2.路由使用

在router檔案中

var express = require
('express'); var router = express.Router(); /*使用屬於本路由檔案的中介軟體 */ router.use(function(req, res, next) { console.log(`Time: ${new Date()}`); next(); }); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); /* POST home page */ router.post('/', function
(req, res, next) {
console.log('post'); // res.json({name: 'syc', value: '1231231'}); res.send('post request'); });

3.路由路徑匹配3中模式

(1)字串

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

(2)字串模式

字元 ?、+、* 和 () 是正則表示式的子集,- 和 . 在基於字串的路徑中按照字面值解釋。

// 問號是b出現0次或者1次的意思,所以匹配abcd,acd
router.get('/ab?cd', function(req, res, next) { res.render('index', { title: 'Express' }); });

(3)正則表示式模式

// 匹配任何路徑中含有 a 的路徑:
app.get(/a/, function(req, res) {
  res.send('/a/');
});

4.路由中路由控制代碼(回撥函式)

路由控制代碼可以有多個,即一個路由可以有多個處理函式

function func1(req, res, next) {
  console.log('func1');
  next();
}
function func2(req, res, next) {
  console.log('func2');
  next();
}
function func3(req, res, next) {
  console.log('func3');
  next();
}
router.get('/arr', [func1, func2, func3], function(req, res){
  res.send('經歷3個函式完成請求');
});

5.路由響應方法

方法 描述
res.download()
    提示下載檔案。
res.end()
    終結響應處理流程。
res.json()
    傳送一個 JSON 格式的響應。
res.jsonp()
    傳送一個支援 JSONP 的 JSON 格式的響應。
res.redirect()
    重定向請求。
res.render()
    渲染檢視模板。
res.send()
    傳送各種型別的響應。
res.sendFile
    以八位位元組流的形式傳送檔案。
res.sendStatus()
    設定響應狀態程式碼,並將其以字串形式作為響應體的一部分發送。

6.註冊處理同一個路由上所有方法(get,post,put等)的方法

此方法目前理解應該寫到app.js中,後面不知道有沒有更好的用法

app.all('/secret', function (req, res, next) {
  console.log('Accessing the secret section ...');
  next(); // pass control to the next handler
});

此方法寫到某一個路由檔案中,功能是攔截此路由檔案中所有的路由

/*使用屬於本路由檔案的中介軟體 */
router.use(function(req, res, next) {
  console.log(`Time: ${new Date()}`);
  next();
});

二.高階部分

待續…