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();
+};