Comments (5)
So finally:
Since RC.8 - use()
method is deprecated.
Instead of use()
method you should use apply()
.
Old way (deprecated):
builder.use({
middlewares: [ HasRole ],
forRoutes: [{
path: 'dashboard',
method: RequestMethod.ALL,
data: { 'roles': ['admin', 'creator', 'editor'] }
}]
})
New way:
builder.apply(HasRole)
.with('admin', 'creator', 'editor')
.forRoutes({
path: 'dashboard',
method: RequestMethod.ALL
});
Using with()
you can pass whatever you want (objects, arrays etc.) to the middleware resolve(...args)
method. You only have to separate arguments by comma.
Now, your resolve()
method of HasRole
middleware should looks like that:
class HasRole {
resolve(...roles) {
/// the rest
}
}
Where roles
is an array of arguments passed by with()
method (in this example, I used spread operator).
from nest.
Hi @cdiaz,
Thanks! :) It is a good question. Since Middlewares in Nest are just types it is not so easy to pass them additional data. I have been wondering how to provide this feature in easy way to use and I decided to do it as below:
builder.use(HasRole)
.with(['admin', 'creator', 'editor'])
.forRoutes({
path: 'dashboard',
method: RequestMethod.ALL
});
So it will be still possible to chain use()
calls, pass arrays in both use()
and forRoutes()
and also add some custom data between use()
and forRoutes()
calls (with()
- of course - is optional). Is it looks more intuitive? What do you think?
Referring to your proposal with canActivate
concept - some middlewares just decorate requests with data. Their responsibility is not only to activate / deactivate routes. This is why I drop this idea :)
from nest.
This is great and very useful, just what I wanted.
Thanks
from nest.
That's really nice, however how can i inject a service then in the middleware? when passing parameters to resolve, then injection stops working
from nest.
This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.
from nest.
Related Issues (20)
- ValidationPipe does not support index.ts file importing HOT 2
- `UploadFile()` should accept `Readable` instead of `Buffer` HOT 5
- @UploadFiles Decorator Not Working As Expected HOT 1
- ClassSerializerInterceptor misses groups when using options.type HOT 1
- AppController query, req, res variables are undefined when typegoose's setLoglevel executed in main.ts HOT 2
- applyDecorators doesn't update the openapi.json file when using Matches decorator HOT 4
- Allow multiple schemas with same name HOT 1
- GRPC Stream Error HOT 4
- `ValidationPipe` and possibly others throw `HttpException` when used on WS gateways
- Type issue with supertest and `app.getHttpServer()` HOT 5
- Middleware `forRoutes` not working with wildcard which is already working for `exclude` of another middleware HOT 1
- Add built-in HTTP exception `TooManyRequests` to `nestjs/common` package HOT 4
- support for nats jetstream in microservice HOT 1
- NestJS microservices sentinels not connected.
- Jest fails to import files HOT 7
- Type instantiation is excessively deep and possibly infinite HOT 3
- Route Handler Fails to Reflect Middleware Modifications to `request.originalUrl` for API Versioning
- cannot run debugger with custom webpack config HOT 1
- Extended ConsoleLogger prints undefined on every log message HOT 2
- Argument of type 'FastifyCookie' is not assignable to parameter of type 'FastifyPluginCallback<FastifyCookieOptions> | FastifyPluginAsync<FastifyCookieOptions> | Promise<...> | Promise<...>'. HOT 2
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 nest.