node.js学习笔记(19) express路由

上一篇笔记中,我们已经使用express-generator创建过express项目。在项目的目录结构中其中一个目录就是routes。


路由是由一个 URI、HTTP 请求(GET、POST等)和若干个回调函数组成。

app.METHOD(path, [callback...], callback)

- app是express的实例

- METHOD是http的方法,post、get、put、delete......

- path是http请求的URI

- callback是当路由匹配时要执行的函数


METHOD

Express提供了很多方法,get, post, put, head, delete, options, trace...

在这里我们只尝试4个最常用的http方法:post、get、put、delete,因为这四个刚好就是对应数据库的CRUD操作。


创建一个新demo:

mkdir study19
cd study19
express demo-router
cd demo-router
npm install


修改routes/index.js如下:

var express = require('express');
var router = express.Router();

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

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

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

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


module.exports = router;

启动demo-router项目。

使用httprequester测试如下:

- get

node.js学习笔记(19) express路由


- post

node.js学习笔记(19) express路由


- put

node.js学习笔记(19) express路由


- delete

node.js学习笔记(19) express路由


PATH


1、字符串路径,必须完全匹配

//'http://localhost:3000/abc'
router.get('/abc', function(req, res, next){
  res.send('success');
});


2、通配符路径

?匹配前一个字符或组合有或没有

//'http://localhost:3000/abc'
//'http://localhost:3000/bc'
router.get('/a?bc', function(req, res, next){
  res.send('success');
});

//'http://localhost:3000/afbcd'
//'http://localhost:3000/bcd'
router.get('/(af)?bcd', function(req, res, next){
  res.send('success');
});


+ 匹配前字符的任意个数(大于0)

//'http://localhost:3000/abc'
//'http://localhost:3000/aabc'
//'http://localhost:3000/aaabc'
// 等
router.get('/a+bc', function(req, res, next){
  res.send('success');
});

* 匹配任意数量的任意字符

//'http://localhost:3000/abc'
//'http://localhost:3000/aabc'
//'http://localhost:3000/abbc'
//'http://localhost:3000/aasdsafdsfewbc'
// 等
router.get('/a*bc', function(req, res, next){
  res.send('success');
});

3、正则表达式路径

//'http://localhost:3000/abc'
router.get(/abc$/, function(req, res, next){
  res.send('success');
});

//'http://localhost:3000/abcd'
//'http://localhost:3000/1212321abcd'
//'http://localhost:3000/safewwabcd'
router.get(/.*abcd$/, function(req, res, next){
  res.send('success');
});

callback

Express的router可以为请求提供多个回调函数。

var result = '';
router.get('/abc', [function(req, res, next){
  result += 's';
  next();
}, function(req, res, next){
  result += 'u';
  next();
}, function(req, res, next){
  result += 'cc';
  next();
}, function(req, res, next){
  result += 'e';
  next();
}, function(req, res, next){
  result += 'ss';
  next();
}], function(req, res){
  res.send(result);
});




上一篇:node.js学习笔记(20) express中间件


下一篇:node.js学习笔记(18) express