diff --git a/API.md b/API.md index d598fba9..4fd6e6f2 100644 --- a/API.md +++ b/API.md @@ -17,7 +17,7 @@ file at the root of your project. - [host](#host) - [port](#port) - [middlewares](#serverMiddlewares) - - [actionDispatcher](#actionDispatcher) + - [createInitAction](#createInitAction) - [layout](#layout) - [ErrorPage](#ErrorPage) - [onError](#onError) @@ -96,12 +96,12 @@ specify its URL here (usually it means you want to use a CDN, or that you don't Path to a file exporting an array of koa middlewares. Useful for additional logging, proxy request, authentication or other things on server. -### [`actionDispatcher`](#actionDispatcher) +### [`createInitAction`](#createInitAction) **`Path (`[`KoaRequest`](http://koajs.com/#request)`, `[`dispatch`](https://redux.js.org/docs/api/Store.html#getState)`, `[`getState`](http://redux.js.org/docs/api/Store.html#getState)`) -> yieldable`** -Path to a file exporting an actionDispatcher. Useful for populating the store on the server before rendering. -The actionDispatcher is passed the node http request object, the dispatch function, and getState -as parameters. It's expected to return something that can be yield (Promise, Generator, etc..) or nothing. If it returns a yieldable, then the server will wait for its completion before continuing. +Path to a file exporting an createInitAction. Useful for populating the store on the server before rendering. + `request` object is passed as a parameter to `createInitAction`. +It must return an action or nothing. The action can be a thunk. ### [`layout`](#layout) **`Path `** diff --git a/README.md b/README.md index c14b6b35..85f8bc92 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,6 @@ import { Route } from 'vitaminjs'; export default ( - ); ``` Create the `reducers.js` file: diff --git a/config/defaults.js b/config/defaults.js index cc659145..32ec8000 100644 --- a/config/defaults.js +++ b/config/defaults.js @@ -8,7 +8,7 @@ export default { ErrorPage: '__vitamin__/src/server/components/ErrorPage', onError: '__vitamin__/config/utils/defaultFunction', layout: '__vitamin__/src/server/components/HTMLLayout', - actionDispatcher: '__vitamin__/config/utils/defaultFunction', + createInitAction: '__vitamin__/config/utils/defaultFunction', }, routes: '__vitamin__/config/utils/emptyArray', basePath: '', diff --git a/config/index.js b/config/index.js index e5c2448f..e2ef6bc0 100644 --- a/config/index.js +++ b/config/index.js @@ -117,7 +117,7 @@ export default () => { ['server', 'ErrorPage'], ['server', 'onError'], ['server', 'layout'], - ['server', 'actionDispatcher'], + ['server', 'createInitAction'], ['redux', 'reducers'], ['redux', 'middlewares'], ['redux', 'enhancers'], diff --git a/src/server/app.js b/src/server/app.js index 536e5817..16cc4c2d 100644 --- a/src/server/app.js +++ b/src/server/app.js @@ -13,7 +13,7 @@ import appMiddlewares from '__app_modules__server_middlewares__'; import renderer from './middlewares/renderer'; import storeCreator from './middlewares/store'; import router from './middlewares/router'; -import actionDispatcher from './middlewares/actionDispatcher'; +import initActionDispatcher from './middlewares/initActionDispatcher'; import staticAssetsServer from './middlewares/staticAssetsServer'; export default compose([ @@ -30,7 +30,7 @@ export default compose([ ...appMiddlewares, staticAssetsServer(), storeCreator(), - actionDispatcher(), + initActionDispatcher(), router(), renderer(), ].filter(Boolean)); diff --git a/src/server/middlewares/actionDispatcher.js b/src/server/middlewares/actionDispatcher.js deleted file mode 100644 index f4a58f4d..00000000 --- a/src/server/middlewares/actionDispatcher.js +++ /dev/null @@ -1,11 +0,0 @@ -// eslint-disable-next-line import/no-extraneous-dependencies -import actionDispatcher from '__app_modules__server_actionDispatcher__'; - -export default () => async (ctx, next) => { - const { dispatch, getState } = ctx.state.store; - const dispatchResult = actionDispatcher(ctx.request, dispatch, getState); - if (dispatchResult) { - await dispatchResult; - } - await next(); -}; diff --git a/src/server/middlewares/initActionDispatcher.js b/src/server/middlewares/initActionDispatcher.js new file mode 100644 index 00000000..ab3e0ea8 --- /dev/null +++ b/src/server/middlewares/initActionDispatcher.js @@ -0,0 +1,11 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +import createInitAction from '__app_modules__server_createInitAction__'; + +export default () => async (ctx, next) => { + const { dispatch } = ctx.state.store; + const action = createInitAction(ctx.request); + if (action) { + await dispatch(action); + } + await next(); +};