Code Monkey home page Code Monkey logo

Comments (7)

samselikoff avatar samselikoff commented on May 28, 2024

Oh interesting. Hm. I'm guessing you know you can return a Response, but you want this just so you can short-circuit a route handler at any time?

We really need a middleware system in Mirage... this has come up a lot recently and will probably be added in the near term.

from discuss.

Turbo87 avatar Turbo87 commented on May 28, 2024

but you want this just so you can short-circuit a route handler at any time

exactly, yes

We really need a middleware system in Mirage

yeah, that would be another potential solution for this

from discuss.

samselikoff avatar samselikoff commented on May 28, 2024

I think I'm a little hesitant to merge this in, because it introduces some new "magic" (exceptions in route handlers return a 500, unless they happen to throw Responses), and in general I don't like using exceptions for program logic/control flow.

I think we should eventually introduce middleware pattern to deal with this.

For now, if you wanted to reuse this logic for your route handlers, I think your best bet might be to make a HOF:

this.get('/users', withAuth((schema, request) => {
});

You might also be able to use the application serializer's serialize method to perform some checks / change the response before it goes out. But I agree we need a better story here.

from discuss.

Turbo87 avatar Turbo87 commented on May 28, 2024

yeah, the withAuth() is pretty much exactly the workaround that I'm using right now. unfortunately though prettier isn't exactly happy about it and transforms it into a multi-line statement... 😅

from discuss.

samselikoff avatar samselikoff commented on May 28, 2024

sucks :/

I'd be happy to prioritize middleware, or even ship it behind a feature flag so we can test it out a bit

from discuss.

Turbo87 avatar Turbo87 commented on May 28, 2024

You might also be able to use the application serializer's serialize method to perform some checks / change the response before it goes out.

I just tried this out, but it seems like the serializer isn't used at all when I throw something in the route handler. Looking at the code, the this.serialize() call is only done in the successful case, but not for the error case. 🤔

from discuss.

samselikoff avatar samselikoff commented on May 28, 2024

FYI: Transferred this to our Discuss repo, our new home for more open-ended conversations about Mirage!

If things become more concrete + actionable we can create a tracking issue in the main repo.

from discuss.

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.