p>Routing refere-se a como os pontos finais de uma aplicação (URIs) respondem aos pedidos dos clientes.
Roteiro refere-se a determinar como uma aplicação responde a um pedido de cliente a um determinado desfecho, que é um URI (ou caminho) e um método de pedido HTTP específico (GET, POST, e assim por diante).
Cada rota pode ter uma ou mais funções de manuseamento, que são executadas quando a rota é correspondida.
A definição de rota toma a seguinte estrutura:
app.METHOD(PATH, HANDLER)
or
app.METHOD(path, callback )
Onde:
-
app
é uma instância deexpress
. -
METHOD
é um método de pedido HTTP. MÉTODO é o método HTTP do pedido, tal como GET, PUT, POST, etc., em letras minúsculas. Assim, os métodos reais sãoapp.get()
app.post()
app.put()
, e assim por diante. -
PATH
é um caminho no servidor. -
HANDLER
é a função de chamada de retorno executada quando a rota e o método são combinados. De facto, os métodos de encaminhamento podem ter como argumentos mais do que uma função de chamada de retorno. Com múltiplas funções de callback, é importante fornecernext
como argumento para a função de callback e depois chamarnext()
dentro do corpo da função para entregar o controlo para a próxima função de callback.
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!')
})
Os exemplos seguintes ilustram a definição de rotas simples.
Resposta com Hello World!
na página inicial:
app.get('/', function (req, res) {
res.send('Hello World!')
})
Resposta ao pedido POST na rota raiz (/
), a página inicial do pedido:
app.post('/', function (req, res) {
res.send('Got a POST request')
})
Resposta a um pedido de PUT à rota /user
:
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})
Resposta a um pedido de DELETE ao /user
rota:
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user')
})
Existe um método especial de encaminhamento, app.all()
, utilizado para carregar funções de middleware num caminho para todos os métodos de pedido HTTP.
É executado o seguinte callback para pedidos a /secret
quer se utilize GET, POST, PUT, DELETE, ou qualquer outro método de pedido HTTP:
app.all('/secret', function (req, res, next) {
console.log('Accessing the secret section ...')
next() // pass control to the next handler
});
Mais do que uma função de callback pode tratar de uma rota (certifique-se de especificar o objecto next
). Por exemplo:
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!')
})
Caminhos de rota, em combinação com um método de pedido, defina os pontos finais em que os pedidos podem ser feitos. Os caminhos de rota podem ser cordas, padrões de cordas, ou expressões regulares.
Os caracteres ?
+
*
, e ()
são subconjuntos das suas contrapartidas de expressão regular. O hífen (-
) e o ponto (.
) são interpretados literalmente por caminhos baseados em cordas.
Se precisar de usar o carácter dólar ($
) numa cadeia de caminhos, rodeie-o com ()
. Por exemplo, a cadeia de caminhos para pedidos em “/data/$book
“, seria “/data/()book
“.
Aqui estão alguns exemplos de caminhos de caminho baseados em cordas.
Este caminho de rota corresponderá aos pedidos à rota raiz, /
.
app.get('/', function (req, res) {
res.send('root')
})
Este caminho de rota corresponderá aos pedidos a /about
.
app.get('/about', function (req, res) {
res.send('about')
})
Esta rota corresponderá aos pedidos para /random.text
.
app.get('/random.text', function (req, res) {
res.send('random.text')
})
Aqui estão alguns exemplos de caminhos de rota baseados em padrões de cordas.
Este caminho de rota irá corresponder a acd
e abcd
.
app.get('/ab?cd', function (req, res) {
res.send('ab?cd')
})
Este caminho de rota coincidirá abcd
abbcd
abbbcd
, e assim por diante.
app.get('/ab+cd', function (req, res) {
res.send('ab+cd')
})
Este caminho de rota irá corresponder abcd
abxcd
abRANDOMcd
ab123cd
, e assim por diante.
app.get('/ab*cd', function (req, res) {
res.send('ab*cd')
})
Este caminho de rota irá corresponder /abe
e /abcde
.
app.get('/ab(cd)?e', function (req, res) {
res.send('ab(cd)?e')
})
Exemplos de caminhos de rota baseados em expressões regulares:
Este caminho de rota irá corresponder a qualquer coisa com um “a” nele.
app.get(/a/, function (req, res) {
res.send('/a/')
})
Esta rota irá corresponder a butterfly
e dragonfly
, mas não butterflyman
dragonflyman
, e assim por diante.
Automadores de rota
P>Pode fornecer múltiplas funções de callback que se comportam como middleware para tratar de um pedido. A única excepção é que estes callbacks podem invocar next('route')
para contornar os callbacks de rota restantes. Pode usar este mecanismo para impor condições prévias a uma rota, depois passar o controlo para rotas subsequentes se não houver razão para prosseguir com a rota actual.
p>Os manipuladores de rotas podem ser
- sob a forma de uma função,
- um conjunto de funções, ou
- combinações de ambas, como se mostra nos exemplos seguintes.
Uma única função de chamada de retorno pode tratar de uma rota. Por exemplo:
app.get('/example/a', function (req, res) {
res.send('Hello from A!')
})
Mais do que uma função de retorno pode tratar de uma rota (certifique-se de especificar o objecto next
). Por exemplo:
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!')
})
Uma série de funções de callback pode tratar de uma rota. Por exemplo:
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', )
Uma combinação de funções independentes e conjuntos de funções pode tratar de uma rota. Por exemplo:
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}var cb1 = function (req, res, next) {
console.log('CB1')
next()
}app.get('/example/d', , function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from D!')
})
app.route()
P>É possível criar manipuladores de rotas em cadeia para uma rota usando app.route()
. Como o caminho é especificado num único local, a criação de rotas modulares é útil, tal como a redução da redundância e dos erros de digitação. Para mais informações sobre os percursos, ver: Router() documentation.
Here é um exemplo de manipuladores de rotas encadeados que são definidos usando app.route()
.
app.route('/book')
.get(function (req, res) {
res.send('Get a random book')
})
.post(function (req, res) {
res.send('Add a book')
})
.put(function (req, res) {
res.send('Update the book')
})
0 comentários