catamphetamine / react-pages

A complete solution for building a React/Redux application: routing, page preloading, (optional) server-side rendering, asynchronous HTTP requests, document metadata, etc.
MIT License
176 stars 29 forks source link

Enable configuration entry for HTTP `on_before_send` #73

Closed beskacz closed 5 years ago

beskacz commented 5 years ago

I need to set Content-Type header to application/vnd.api+json for each POST/PATCH/DELETE call in my application and enable CORS requests with credentials by invoking request.withCredentials() on the superagent.

HttpClient has that option, but it can't be set: https://github.com/catamphetamine/react-website/blob/master/source/HttpClient.js#L145

Can you bring back this functionality?

catamphetamine commented 5 years ago

I need to set Content-Type header to application/vnd.api+json for each POST/PATCH/DELETE call in my application

Can you explain more what do you mean

and enable CORS requests with credentials by invoking request.withCredentials() on the superagent.

Yeah, I guess we could add that option, something like http.get(url, data, { withCredentials: true }).

beskacz commented 5 years ago

In the rect-isomorphic-render@11 there was http request setting:

http:
  {
    // (optional)
    // Will be called for each HTTP request
    // sent using `http` utility inside Redux action creators.
    // (`request` is a `superagent` request)
    request: (request, { store }) =>
    {
      if (request.url.indexOf('https://my.domain.com') === 0)
      {
        request.set('X-Secret-Token', store.getState().secretToken)
      }
    }
   ...
}

As described here: https://visionmedia.github.io/superagent/#cors withCredentials allows to send cookies cross-origin and we are using a session cookie to authorize with API.

It would be actually better to set/modify request globally, as if it's set during making the call, I need to amend each call in our app and it will be an additional boilerplate.

catamphetamine commented 5 years ago

I meant this:

I need to set Content-Type header to application/vnd.api+json for each POST/PATCH/DELETE call in my application

catamphetamine commented 5 years ago

What's the reason for setting application/vnd.api+json in your app?

catamphetamine commented 5 years ago

@bartushek Oh, nvm, I see it now on stackoverflow: https://stackoverflow.com/questions/28055526/header-value-application-vnd-apijson So, basically, application/vnd.api+json has a specific standardized schema applied to it.

beskacz commented 5 years ago

Yup, exactly, I need to set it, as our API throws errors when content-type mismatch. Now I wonder how did it work previously on the client side, as this is the configuration option for webpageServer. Was it somehow shared between client and server? 🤔

catamphetamine commented 5 years ago

I guess I'll just uncomment this line: https://github.com/catamphetamine/react-website/blob/149afa0248d61e452c1744d9069e5a6ab0ea8d3c/source/redux/HttpClient.js#L9-L21

What would be a better name for this setting...

I guess it'll be http.onRequest(request, { ...parameters }). See if the latest release works.

Now I wonder how did it work previously on the client side, as this is the configuration option for webpageServer.

No, it's the shared setting. See the end of the section: https://github.com/catamphetamine/react-website#http-utility

beskacz commented 5 years ago

Great! I've already seen your commit, onRequest looks good and IMO this hook name is more often used across other libraries :) Thank you!