Comments (6)
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.
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.
@pixeldrew that's interesting approach and it is working. Thanks a lot.
from joi-router.
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.
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.
Closing due to inactivity. Please reopen with a reproducible example if the issue persists.
from joi-router.
Related Issues (20)
- Does not allow validate options HOT 3
- Allow throwing an error inside route handler when `continueOnError` is true
- Typescript error HOT 1
- Allow body schema when type is multipart
- Error when validate query only request
- update @koa/router?
- Prefix not work when pass router to another router using r.route HOT 5
- ctx.request.rawBody HOT 2
- `is-gen-fn` is has invalid package.json in Node 16 HOT 4
- Dicer HOT 1
- how can i use graphql / koa-graphql ?
- Object/named array in query string HOT 4
- Query validator doens't work HOT 1
- Body validator doesn't work as well HOT 1
- Replace flatten package with something robust ( array-flatten ) HOT 2
- XSS vulnerability detected in `clone` package HOT 3
- 5->6 migration guide HOT 2
- Error: next() called multiple times HOT 9
- README.md Example Code Not Functional HOT 1
- Update Joi to version 17 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from joi-router.