mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Allow overriding Content-Type (#3242)
* Allow overriding Content-Type * Mock getHeader
This commit is contained in:
parent
828dac7d61
commit
1424b84c98
|
@ -185,7 +185,9 @@ export function sendHTML (req, res, html, method, { dev }) {
|
|||
}
|
||||
|
||||
res.setHeader('ETag', etag)
|
||||
res.setHeader('Content-Type', 'text/html')
|
||||
if (!res.getHeader('Content-Type')) {
|
||||
res.setHeader('Content-Type', 'text/html')
|
||||
}
|
||||
res.setHeader('Content-Length', Buffer.byteLength(html))
|
||||
res.end(method === 'HEAD' ? null : html)
|
||||
}
|
||||
|
|
13
test/integration/basic/pages/custom-encoding.js
Normal file
13
test/integration/basic/pages/custom-encoding.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
import React from 'react'
|
||||
export default class extends React.Component {
|
||||
static async getInitialProps ({res}) {
|
||||
if (res) {
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
||||
}
|
||||
return {}
|
||||
}
|
||||
|
||||
render () {
|
||||
return null
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
import { join } from 'path'
|
||||
import {
|
||||
renderViaHTTP,
|
||||
fetchViaHTTP,
|
||||
findPort,
|
||||
launchApp,
|
||||
killApp
|
||||
|
@ -55,7 +56,7 @@ describe('Basic Features', () => {
|
|||
})
|
||||
afterAll(() => killApp(context.server))
|
||||
|
||||
rendering(context, 'Rendering via HTTP', (p, q) => renderViaHTTP(context.appPort, p, q))
|
||||
rendering(context, 'Rendering via HTTP', (p, q) => renderViaHTTP(context.appPort, p, q), (p, q) => fetchViaHTTP(context.appPort, p, q))
|
||||
clientNavigation(context, (p, q) => renderViaHTTP(context.appPort, p, q))
|
||||
dynamic(context, (p, q) => renderViaHTTP(context.appPort, p, q))
|
||||
hmr(context, (p, q) => renderViaHTTP(context.appPort, p, q))
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import cheerio from 'cheerio'
|
||||
|
||||
export default function ({ app }, suiteName, render) {
|
||||
export default function ({ app }, suiteName, render, fetch) {
|
||||
async function get$ (path, query) {
|
||||
const html = await render(path, query)
|
||||
return cheerio.load(html)
|
||||
|
@ -63,6 +63,16 @@ export default function ({ app }, suiteName, render) {
|
|||
expect($('pre').text().includes(expectedErrorMessage)).toBeTruthy()
|
||||
})
|
||||
|
||||
test('default Content-Type', async () => {
|
||||
const res = await fetch('/stateless')
|
||||
expect(res.headers.get('Content-Type')).toMatch('text/html')
|
||||
})
|
||||
|
||||
test('setting Content-Type in getInitialProps', async () => {
|
||||
const res = await fetch('/custom-encoding')
|
||||
expect(res.headers.get('Content-Type')).toMatch('text/html; charset=utf-8')
|
||||
})
|
||||
|
||||
test('allows to import .json files', async () => {
|
||||
const html = await render('/json')
|
||||
expect(html.includes('Zeit')).toBeTruthy()
|
||||
|
|
|
@ -117,6 +117,9 @@ describe('Production Usage', () => {
|
|||
const req = { url: '/stateless', headers: {} }
|
||||
const headers = {}
|
||||
const res = {
|
||||
getHeader (key) {
|
||||
return headers[key]
|
||||
},
|
||||
setHeader (key, value) {
|
||||
headers[key] = value
|
||||
},
|
||||
|
@ -132,6 +135,9 @@ describe('Production Usage', () => {
|
|||
const originalConfigValue = app.config.poweredByHeader
|
||||
app.config.poweredByHeader = false
|
||||
const res = {
|
||||
getHeader () {
|
||||
return false
|
||||
},
|
||||
setHeader (key, value) {
|
||||
if (key === 'X-Powered-By') {
|
||||
throw new Error('Should not set the X-Powered-By header')
|
||||
|
|
|
@ -23,8 +23,12 @@ export function renderViaAPI (app, pathname, query) {
|
|||
}
|
||||
|
||||
export function renderViaHTTP (appPort, pathname, query) {
|
||||
return fetchViaHTTP(appPort, pathname, query).then((res) => res.text())
|
||||
}
|
||||
|
||||
export function fetchViaHTTP (appPort, pathname, query) {
|
||||
const url = `http://localhost:${appPort}${pathname}${query ? `?${qs.stringify(query)}` : ''}`
|
||||
return fetch(url).then((res) => res.text())
|
||||
return fetch(url)
|
||||
}
|
||||
|
||||
export function findPort () {
|
||||
|
|
|
@ -6071,9 +6071,9 @@ strip-json-comments@~2.0.1:
|
|||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
|
||||
styled-jsx@2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-2.1.1.tgz#e7481c7554df50d605cdc84a4e53c58fec3449b5"
|
||||
styled-jsx@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-2.1.2.tgz#c84823402678022355b090d98d959ba126b97911"
|
||||
dependencies:
|
||||
babel-plugin-syntax-jsx "6.18.0"
|
||||
babel-types "6.23.0"
|
||||
|
|
Loading…
Reference in a new issue