From 23919a9e0114b0d9a5c0769ab3ce3d12fca48301 Mon Sep 17 00:00:00 2001 From: Atinux Date: Fri, 3 Nov 2017 17:14:05 +0100 Subject: [PATCH] feat: Add middleware as function --- lib/app/client.js | 1 + lib/app/server.js | 2 ++ test/basic.csr.test.js | 14 ++++++++++++++ test/basic.ssr.test.js | 11 +++++++++++ test/fixtures/basic/pages/fn-midd.vue | 17 +++++++++++++++++ 5 files changed, 45 insertions(+) create mode 100644 test/fixtures/basic/pages/fn-midd.vue diff --git a/lib/app/client.js b/lib/app/client.js index e247b63713..0c5a6ff3a7 100644 --- a/lib/app/client.js +++ b/lib/app/client.js @@ -159,6 +159,7 @@ function callMiddleware (Components, context, layout) { } midd = midd.map(name => { + if (typeof name === 'function') return name if (typeof middleware[name] !== 'function') { unknownMiddleware = true this.error({ statusCode: 500, message: 'Unknown middleware ' + name }) diff --git a/lib/app/server.js b/lib/app/server.js index 61175aac5e..fdf484b1da 100644 --- a/lib/app/server.js +++ b/lib/app/server.js @@ -103,6 +103,7 @@ export default async ssrContext => { */ let midd = <%= serialize(router.middleware, { isJSON: true }) %> midd = midd.map((name) => { + if (typeof name === 'function') return name if (typeof middleware[name] !== 'function') { ssrContext.error({ statusCode: 500, message: 'Unknown middleware ' + name }) } @@ -134,6 +135,7 @@ export default async ssrContext => { } }) midd = midd.map((name) => { + if (typeof name === 'function') return name if (typeof middleware[name] !== 'function') { app.context.error({ statusCode: 500, message: 'Unknown middleware ' + name }) } diff --git a/test/basic.csr.test.js b/test/basic.csr.test.js index 3840b95b10..ff0f278f1f 100644 --- a/test/basic.csr.test.js +++ b/test/basic.csr.test.js @@ -154,6 +154,20 @@ test('/meta', async t => { t.deepEqual(state.meta, [{ works: true }]) }) +test('/fn-midd', async t => { + await page.nuxt.navigate('/fn-midd', true) + + t.is(await page.$text('.title'), 'You need to ask the permission') + t.deepEqual(await page.nuxt.errorData(), { message: 'You need to ask the permission', statusCode: 403 }) +}) + +test('/fn-midd?please=true', async t => { + await page.nuxt.navigate('/fn-midd?please=true', true) + + const h1 = await page.$text('h1') + t.true(h1.includes('Date:')) +}) + // Close server and ask nuxt to stop listening to file changes test.after('Closing server and nuxt.js', t => { nuxt.close() diff --git a/test/basic.ssr.test.js b/test/basic.ssr.test.js index c487581f4f..268a45ea33 100755 --- a/test/basic.ssr.test.js +++ b/test/basic.ssr.test.js @@ -204,6 +204,17 @@ test('/meta', async t => { t.true(html.includes('"meta":[{"works":true}]')) }) +test('/fn-midd', async t => { + const err = await t.throws(rp(url('/fn-midd'), { resolveWithFullResponse: true })) + t.is(err.statusCode, 403) + t.true(err.response.body.includes('You need to ask the permission')) +}) + +test('/fn-midd?please=true', async t => { + const { html } = await nuxt.renderRoute('/fn-midd?please=true') + t.true(html.includes('

Date:')) +}) + // Close server and ask nuxt to stop listening to file changes test.after('Closing server and nuxt.js', t => { nuxt.close() diff --git a/test/fixtures/basic/pages/fn-midd.vue b/test/fixtures/basic/pages/fn-midd.vue new file mode 100644 index 0000000000..1d2a4e4bb2 --- /dev/null +++ b/test/fixtures/basic/pages/fn-midd.vue @@ -0,0 +1,17 @@ + + +