diff --git a/lib/server.js b/lib/server.js index fc728c383e..53cc60379f 100644 --- a/lib/server.js +++ b/lib/server.js @@ -2,6 +2,7 @@ const http = require('http') const connect = require('connect') +const path = require('path') class Server { constructor (nuxt) { @@ -11,17 +12,31 @@ class Server { this.server = http.createServer(this.app) // Add Middleware this.nuxt.options.serverMiddleware.forEach(m => { - if (m instanceof Function) { - this.app.use(m) - } else if (m && m.path && m.handler) { - this.app.use(m.path, m.handler) - } + this.useMiddleware(m) }) // Add default render middleware - this.app.use(this.render.bind(this)) + this.useMiddleware(this.render.bind(this)) return this } + useMiddleware (m) { + // Require if needed + if (typeof m === 'string') { + let src = m + // Using ~ shorthand to resolve from project srcDir + if (src.indexOf('~') === 0) { + src = path.resolve(this.nuxt.options.srcDir, src.substr(1)) + } + // eslint-disable-next-line no-eval + m = eval('require')(src) + } + if (m instanceof Function) { + this.app.use(m) + } else if (m && m.path && m.handler) { + this.app.use(m.path, m.handler) + } + } + render (req, res, next) { this.nuxt.render(req, res) return this