Koa.js - construção de URL
Agora podemos definir rotas; eles são estáticos ou fixos. Para usar rotas dinâmicas, precisamos fornecer diferentes tipos de rotas. O uso de rotas dinâmicas nos permite passar parâmetros e processar com base neles. A seguir está um exemplo de uma rota dinâmica.
var koa = require('koa');
var router = require('koa-router');
var app = koa();
var _ = router();
_.get('/:id', sendID);
function *sendID() {
this.body = 'The id you specified is ' + this.params.id;
}
app.use(_.routes());
app.listen(3000);
Para testar isso vá para https://localhost:3000/123. Você obterá a seguinte resposta.
Você pode substituir '123' no URL por qualquer outra coisa e isso será refletido na resposta. A seguir está um exemplo complexo do acima.
var koa = require('koa');
var router = require('koa-router');
var app = koa();
var _ = router();
_.get('/things/:name/:id', sendIdAndName);
function *sendIdAndName(){
this.body = 'id: ' + this.params.id + ' and name: ' + this.params.name;
};
app.use(_.routes());
app.listen(3000);
Para testar isso vá para https://localhost:3000/things/tutorialspoint/12345.
Você pode usar o this.paramsobjeto para acessar todos os parâmetros que você passa na URL. Observe que os dois acima têm caminhos diferentes. Eles nunca se sobreporão. Além disso, se você quiser executar o código ao obter '/ things', precisará defini-lo separadamente.
Rotas com correspondência de padrão
Você também pode usar regex para restringir a correspondência de parâmetro de URL. Digamos que você precise que o id tenha um número de cinco dígitos. Você pode usar a seguinte definição de rota.
var koa = require('koa');
var router = require('koa-router');
var app = koa();
var _ = router();
_.get('/things/:id([0-9]{5})', sendID);
function *sendID(){
this.body = 'id: ' + this.params.id;
}
app.use(_.routes());
app.listen(3000);
Observe que isso vai onlycorresponder às solicitações que têm um id de 5 dígitos. Você pode usar regexes mais complexas para corresponder / validar suas rotas. Se nenhuma de suas rotas corresponder à solicitação, você receberá uma mensagem Não encontrado como resposta.
Por exemplo, se definirmos as mesmas rotas acima, ao solicitar um URL válido, obtemos -