# Middleware

## Location
The definitions of middleware reside in `shell/middleware`. Middleware added to the object in `shell/nuxt/middleware.js` will be initialized at the start of the app rendering. 


## Notes
This file was generated by nuxt and will soon be redefined by hand. It's safe to add new middleware to this file.

## Pattern 
Define the middleware in a file that resides within `shell/middleware`. Then add the instantiation to the object that resides in `shell/nuxt/middleware.js`.

shell/middleware/i18n.js
```js
export default async function({
  isHMR, app, store, route, params, error, redirect
}) {
  // If middleware is called from hot module replacement, ignore it
  if (isHMR) {
    return;
  }

  await store.dispatch('i18n/init');
}
```

shell/nuxt/middleware.js
```js
...
middleware['i18n'] = require('../middleware/i18n.js')
middleware['i18n'] = middleware['i18n'].default || middleware['i18n']
...
```
