diff --git a/lib/core/middleware/nuxt.js b/lib/core/middleware/nuxt.js index 8c1a14c59152..a1ffee0abc1b 100644 --- a/lib/core/middleware/nuxt.js +++ b/lib/core/middleware/nuxt.js @@ -7,11 +7,12 @@ import { getContext } from '../../common/utils' export default async function nuxtMiddleware(req, res, next) { // Get context const context = getContext(req, res) + const url = decodeURIComponent(req.url) res.statusCode = 200 try { - const result = await this.renderRoute(req.url, context) - await this.nuxt.callHook('render:route', req.url, result, context) + const result = await this.renderRoute(url, context) + await this.nuxt.callHook('render:route', url, result, context) const { html, cspScriptSrcHashSet, @@ -21,7 +22,7 @@ export default async function nuxtMiddleware(req, res, next) { } = result if (redirected) { - this.nuxt.callHook('render:routeDone', req.url, result, context) + this.nuxt.callHook('render:routeDone', url, result, context) return html } if (error) { @@ -34,7 +35,7 @@ export default async function nuxtMiddleware(req, res, next) { if (fresh(req.headers, { etag })) { res.statusCode = 304 res.end() - this.nuxt.callHook('render:routeDone', req.url, result, context) + this.nuxt.callHook('render:routeDone', url, result, context) return } res.setHeader('ETag', etag) @@ -81,7 +82,7 @@ export default async function nuxtMiddleware(req, res, next) { res.setHeader('Content-Type', 'text/html; charset=utf-8') res.setHeader('Content-Length', Buffer.byteLength(html)) res.end(html, 'utf8') - this.nuxt.callHook('render:routeDone', req.url, result, context) + this.nuxt.callHook('render:routeDone', url, result, context) return html } catch (err) { /* istanbul ignore if */ diff --git "a/test/fixtures/spa/pages/\321\202\320\265\321\201\321\202\351\233\250.vue" "b/test/fixtures/spa/pages/\321\202\320\265\321\201\321\202\351\233\250.vue" new file mode 100644 index 000000000000..c60926b6ac5e --- /dev/null +++ "b/test/fixtures/spa/pages/\321\202\320\265\321\201\321\202\351\233\250.vue" @@ -0,0 +1,12 @@ + + + diff --git a/test/unit/spa.test.js b/test/unit/spa.test.js index f63153565746..0d866a6b4f45 100644 --- a/test/unit/spa.test.js +++ b/test/unit/spa.test.js @@ -27,6 +27,14 @@ describe('spa', () => { consola.log.mockClear() }) + test('/тест雨 (test non ascii route)', async () => { + const { html } = await renderRoute('/тест雨') + expect(html).toMatch('Hello SPA!') + expect(consola.log).not.toHaveBeenCalledWith('created') + expect(consola.log).toHaveBeenCalledWith('mounted') + consola.log.mockClear() + }) + test('/custom (custom layout)', async () => { const { html } = await renderRoute('/custom') expect(html).toMatch('Custom layout')