Как я могу получить список маршрутов URL-адресов сервера Koa

Я разрабатываю фиктивный сервер с использованием koajs и хотел бы опубликовать сервис, в котором перечислены разработанные API.

Я использую koa-router для подключения сервисов.

И я хотел бы что-то вроде:

var business_router = require('./controllers/router');
app.use(business_router.routes());   
app.use(business_router.allowedMethods());

console.log(app.listRoutes());

person MIGUEL ANGEL ALONSO PEREZ    schedule 04.07.2016    source источник
comment
Не очень понятно, о чем ваш вопрос.   -  person Andrei Zhytkevich    schedule 04.07.2016
comment
Для app все они просто функции промежуточного программного обеспечения, независимо от того, являются ли они промежуточным программным обеспечением маршрутизатора (использующим koa-router) или каким-либо другим промежуточным программным обеспечением (обработчиками ошибок), известно только вам. Тем не менее, список всех промежуточных программ, которые использует app, вероятно, не задокументирован. В экспрессе это можно сделать подобно этому, но экспресс имел роутер свой. Итак, это не ответ, но я надеюсь, что это каким-то образом поможет. Я бы проверил app, чтобы получить все промежуточные программы и посмотреть, есть ли у них отличительная особенность от того, что сгенерировано с помощью koa-router.   -  person laggingreflex    schedule 04.07.2016


Ответы (1)


Хотя я предполагаю, что это не часть официального koa-router API, вы можете сделать следующее:

var app = require('koa')();
var router = require('koa-router')();

router.get('/bar', function*() { this.body = 'Hi'; }});
router.get('/bar/foo', function*() { this.body = 'Hi'; }});
router.get('/foo', function*() { this.body = 'Hi'; }});
router.get('/bar/baz', function*() { this.body = 'Hi'; }});

app
  .use(router.routes())
  .use(router.allowedMethods());

console.log(router.stack.map(i => i.path));
// ['/bar', '/bar/foo', '/foo', '/bar/baz']

В вашем случае, предполагая, что business_router является экземпляром koa-router:

console.log(business_router.stack.map(i => i.path));
person zeronone    schedule 06.07.2016
comment
Я использую это решение, работает хорошо, но я получаю некоторые значения '(.*)' внутри списка, что они означают? - person Anto; 28.07.2019