GithubHelp home page GithubHelp logo

How pass params to the Middleware? about nest HOT 5 CLOSED

nestjs avatar nestjs commented on April 23, 2024 1
How pass params to the Middleware?

from nest.

Comments (5)

kamilmysliwiec avatar kamilmysliwiec commented on April 23, 2024 2

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.

kamilmysliwiec avatar kamilmysliwiec commented on April 23, 2024

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.

cdiaz avatar cdiaz commented on April 23, 2024

This is great and very useful, just what I wanted.
Thanks

from nest.

nextsoftpl avatar nextsoftpl commented on April 23, 2024

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.

lock avatar lock commented on April 23, 2024

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)

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.