hooks: Handle hooks as object

This commit is contained in:
Atinux 2017-10-31 12:33:15 +01:00
parent 7aa0863cb7
commit 7137f848a2
4 changed files with 31 additions and 3 deletions

View File

@ -291,7 +291,7 @@ Options.defaults = {
editor: { editor: {
editor: 'code' editor: 'code'
}, },
hooks: () => {}, hooks: null,
messages: { messages: {
error_404: 'This page could not be found', error_404: 'This page could not be found',
server_error: 'Server error', server_error: 'Server error',

View File

@ -6,6 +6,7 @@ import Renderer from './renderer'
import Debug from 'debug' import Debug from 'debug'
import enableDestroy from 'server-destroy' import enableDestroy from 'server-destroy'
import Module from 'module' import Module from 'module'
import { isPlainObject } from 'lodash'
import { join, resolve } from 'path' import { join, resolve } from 'path'
const debug = Debug('nuxt:') const debug = Debug('nuxt:')
@ -41,8 +42,10 @@ export default class Nuxt {
return this._ready return this._ready
} }
// Call hooks // Add hooks
if (typeof this.options.hooks === 'function') { if (isPlainObject(this.options.hooks)) {
this.addObjectHooks(this.options.hooks)
} else if (typeof this.options.hooks === 'function') {
this.options.hooks(this.hook) this.options.hooks(this.hook)
} }
// Add nuxt modules // Add nuxt modules
@ -56,6 +59,9 @@ export default class Nuxt {
} }
hook(name, fn) { hook(name, fn) {
if (!name || typeof fn !== 'function') {
return
}
this._hooks[name] = this._hooks[name] || [] this._hooks[name] = this._hooks[name] || []
this._hooks[name].push(fn) this._hooks[name].push(fn)
} }
@ -73,6 +79,17 @@ export default class Nuxt {
} }
} }
addObjectHooks(hooksObj) {
Object.keys(hooksObj).forEach((name) => {
let hooks = hooksObj[name]
hooks = (Array.isArray(hooks) ? hooks : [hooks])
hooks.forEach((hook) => {
this.hook(name, hook)
})
})
}
listen(port = 3000, host = 'localhost') { listen(port = 3000, host = 'localhost') {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const server = this.renderer.app.listen({ port, host, exclusive: false }, (err) => { const server = this.renderer.app.listen({ port, host, exclusive: false }, (err) => {

View File

@ -32,6 +32,10 @@ test.before('Init Nuxt.js', async t => {
server.listen(port) server.listen(port)
}) })
test('Check ready hook called', async t => {
t.true(nuxt.__hook_called__)
})
test('/stateless', async t => { test('/stateless', async t => {
const window = await nuxt.renderAndGetWindow(url('/stateless')) const window = await nuxt.renderAndGetWindow(url('/stateless'))
const html = window.document.body.innerHTML const html = window.document.body.innerHTML

View File

@ -6,5 +6,12 @@ module.exports = {
{ route: '/users/3', payload: { id: 3000 } } { route: '/users/3', payload: { id: 3000 } }
], ],
interval: 200 interval: 200
},
hooks: {
ready(nuxt) {
nuxt.__hook_called__ = true
},
bad: null,
'': true
} }
} }