1.基本路由示例
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('hello world')
})
2.路由方法
常见的get和post方法
// GET method route
app.get('/', function (req, res) {
res.send('GET request to the homepage')
})
// POST method route
app.post('/', function (req, res) {
res.send('POST request to the homepage')
}
一种特殊的路由方法,app.all()用于为所有HTTP请求方法的路径加载中间件功能
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...')
next()
})
3.路由路径
路由路径和请求方法结合,定义了可以进行请求的端点。路由路径可以是字符串、字符串模式或正则表达式。
请求路径匹配到/random.text
app.get('/random.text', function (req, res) {
res.send('random.text')
})
请求路径匹配acd和abcd
app.get('/ab?cd', function (req, res) {
res.send('ab?cd')
})
请求路径匹配abcd
, abxcd
, abRANDOMcd
, ab123cd
等等
app.get('/ab*cd', function (req, res) {
res.send('ab*cd')
})
请求路径匹配 /abe
和 /abcde
app.get('/ab(cd)?e', function (req, res) {
res.send('ab(cd)?e')
})
请求路径匹配带有a的任何路径
app.get(/a/, function (req, res) {
res.send('/a/')
})
请求路径匹配 butterfly
和 dragonfly
, 但是不匹配 butterflyman
, dragonflyman等等
app.get(/.*fly$/, function (req, res) {
res.send('/.*fly$/')
})
4.路径参数
路径参数被命名为URL段,用于捕获URL在其位置处指定的值。捕获的值将填充到req.params对象中
Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }
符号-和.可以对路径参数进行分割
Route path: /flights/:from-:to
Request URL: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" }
Route path: /plantae/:genus.:species
Request URL: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" }
如果想对url中的路径参数进行限制,可以在后面加个(正则表达式)
由于正则表达式通常是文字字符串的一部分,所以用\对所有字符转义
Route path: /user/:userId(\\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}
5.路由处理程序
单个回调函数处理路由
app.get('/example/a', function (req, res) {
res.send('Hello from A!')
})
多个回调函数处理路由
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
回调函数数组可以处理路由
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}
var cb1 = function (req, res, next) {
console.log('CB1')
next()
}
var cb2 = function (req, res) {
res.send('Hello from C!')
}
app.get('/example/c', [cb0, cb1, cb2])
独立功能和功能数组的组合来处理路由
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}
var cb1 = function (req, res, next) {
console.log('CB1')
next()
}
app.get('/example/d', [cb0, cb1], function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from D!')
})
6.响应方法
后面具体看官网