Coder Social home page Coder Social logo

Nested router prefix about joi-router HOT 6 CLOSED

koajs avatar koajs commented on May 12, 2024 1
Nested router prefix

from joi-router.

Comments (6)

pixeldrew avatar pixeldrew commented on May 12, 2024 3

The way i've been able to compose paths is by having the parent route use the child routes as middleware, effectively composing them. YMMV

import router from 'koa-joi-router';
const userRouter = router();
userRouter.prefix('/user');
const userRoutes = [...];
userRouter.route(userRoutes);
export default userRouter;
import router from 'koa-joi-router';
import userRouter from 'userRoutes';
apiRouter.prefix('/app');
apiRouter.use('', userRouter);
export default apiRouter;

from joi-router.

paul42 avatar paul42 commented on May 12, 2024 1

I believe the root cause of your issue is that .prefix() doesn't prepend '/users' to each route, so that when you got to your apiRouter and run apiRouter.route(userRouter.routes); apiRouter doesn't get any information on what userRouter's prefix is. you'd have to request an enhancement (or make a pull request) to perhaps add a method like .compose() where it takes in another router, and adds it together, prefix, routes, and options.

I think if you want a short-term fix, you'd have to mount the userRouter separately, I think in server.js you need a similar entry in your server.js

app.use(userRouter.middleware());
app.use(apiRouter.middleware());

for each router that you want to have a unique prefix on. unless there's a way to have the api be composeable (perhaps other contributors can chime in, I'm just a novice user).

from joi-router.

thakkaryash94 avatar thakkaryash94 commented on May 12, 2024

@pixeldrew that's interesting approach and it is working. Thanks a lot.

from joi-router.

pixeldrew avatar pixeldrew commented on May 12, 2024

My ideal solution is to recursively add files in a directory as a route using the package 'require-directory'. These can either be descriptor literals that are the params to the Router.route method or Router objects themselves, as a rough example:

const Router = require('koa-joi-router');
const routes = require('require-directory')(module, {
  visit: (module) => {
    if (module instanceof Router) {
      return module;
    }
    const router = Router();
    router.route(module);
    return router;
  },
});

const router = Router();
// root url
router.prefix('/app');

const addChildRoute = (path, [key, route]) => {
  if (route instanceof Router) {
    router.use(path, route);
  } else {
    Object.entries(route).forEach(addChildRoute.bind(null, `${path}/${key}`));
  }
};

Object.entries(routes).forEach(addChildRoute.bind(null, ''));

from joi-router.

pixeldrew avatar pixeldrew commented on May 12, 2024

It'd be good to have @aheckmann chime in on whether or not this approach seems valid. When debugging routes i've noticed that koa-router is checking a lot of invalid routes.

from joi-router.

aheckmann avatar aheckmann commented on May 12, 2024

Closing due to inactivity. Please reopen with a reproducible example if the issue persists.

from joi-router.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.