Express路由

Posted So istes immer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Express路由相关的知识,希望对你有一定的参考价值。

目录 

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')
})

请求路径匹配abcdabxcdabRANDOMcdab123cd等等

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, 但是不匹配 butterflymandragonflyman等等

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.响应方法

后面具体看官网

https://www.expressjs.com.cn/guide/routing.html

以上是关于Express路由的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

express路由及配置

express路由及配置

浅析Express中的路由与应用模式