mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Use our static file rendering machanism to serve pages.
This should work well since the file path for a page is predictable.
This commit is contained in:
parent
b5739d5361
commit
0b6575b470
|
@ -8,7 +8,6 @@ import {
|
|||
renderErrorToHTML,
|
||||
sendHTML,
|
||||
serveStatic,
|
||||
renderScript,
|
||||
renderScriptError
|
||||
} from './render'
|
||||
import Router from './router'
|
||||
|
@ -201,9 +200,9 @@ export default class Server {
|
|||
|
||||
'/_next/:buildId/page/:path*': async (req, res, params) => {
|
||||
const paths = params.path || ['']
|
||||
// We need to remove `.js` from the page otherwise it won't work with
|
||||
// page rewrites
|
||||
// eg:- we re-write page/index.js into page.js
|
||||
// URL is asks for ${page}.js (to support loading assets from static dirs)
|
||||
// But there's no .js in the actual page.
|
||||
// So, we need to remove .js to get the page name.
|
||||
const page = `/${paths.join('/')}`.replace('.js', '')
|
||||
|
||||
if (!this.handleBuildId(params.buildId, res)) {
|
||||
|
@ -227,7 +226,8 @@ export default class Server {
|
|||
}
|
||||
}
|
||||
|
||||
await renderScript(req, res, page, this.renderOpts)
|
||||
const p = join(this.dir, this.dist, 'bundles', 'pages', paths.join('/'))
|
||||
await this.serveStatic(req, res, p)
|
||||
},
|
||||
|
||||
// It's very important keep this route's param optional.
|
||||
|
|
|
@ -30,7 +30,7 @@ describe('On Demand Entries', () => {
|
|||
})
|
||||
|
||||
it('should compile pages for JSON page requests', async () => {
|
||||
const pageContent = await renderViaHTTP(context.appPort, '/_next/-/page/about')
|
||||
const pageContent = await renderViaHTTP(context.appPort, '/_next/-/page/about.js')
|
||||
expect(pageContent.includes('About Page')).toBeTruthy()
|
||||
})
|
||||
|
||||
|
@ -39,11 +39,11 @@ describe('On Demand Entries', () => {
|
|||
expect(existsSync(indexPagePath)).toBeTruthy()
|
||||
|
||||
// Render two pages after the index, since the server keeps at least two pages
|
||||
await renderViaHTTP(context.appPort, '/_next/-/page/about')
|
||||
await renderViaHTTP(context.appPort, '/about')
|
||||
await renderViaHTTP(context.appPort, '/_next/on-demand-entries-ping', {page: '/about'})
|
||||
const aboutPagePath = resolve(__dirname, '../.next/bundles/pages/about.js')
|
||||
|
||||
await renderViaHTTP(context.appPort, '/_next/-/page/third')
|
||||
await renderViaHTTP(context.appPort, '/third')
|
||||
await renderViaHTTP(context.appPort, '/_next/on-demand-entries-ping', {page: '/third'})
|
||||
const thirdPagePath = resolve(__dirname, '../.next/bundles/pages/third.js')
|
||||
|
||||
|
|
3
test/integration/production/info.json
Normal file
3
test/integration/production/info.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"version": "cool-version"
|
||||
}
|
|
@ -13,6 +13,7 @@ import {
|
|||
import webdriver from 'next-webdriver'
|
||||
import fetch from 'node-fetch'
|
||||
import dynamicImportTests from '../../basic/test/dynamic'
|
||||
import { readFileSync } from 'fs'
|
||||
|
||||
const appDir = join(__dirname, '../')
|
||||
let appPort
|
||||
|
@ -110,6 +111,21 @@ describe('Production Usage', () => {
|
|||
const data = await renderViaHTTP(appPort, '/static/data/item.txt')
|
||||
expect(data).toBe('item')
|
||||
})
|
||||
|
||||
it('should only access files inside .next directory', async () => {
|
||||
const buildId = readFileSync(join(__dirname, '../.next/BUILD_ID'), 'utf8')
|
||||
|
||||
const pathsToCheck = [
|
||||
`/_next/${buildId}/page/../../../info`,
|
||||
`/_next/${buildId}/page/../../../info.js`,
|
||||
`/_next/${buildId}/page/../../../info.json`
|
||||
]
|
||||
|
||||
for (const path of pathsToCheck) {
|
||||
const data = await renderViaHTTP(appPort, path)
|
||||
expect(data.includes('cool-version')).toBeFalsy()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('X-Powered-By header', () => {
|
||||
|
|
87
yarn.lock
87
yarn.lock
|
@ -1090,14 +1090,14 @@ babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-tr
|
|||
invariant "^2.2.2"
|
||||
lodash "^4.17.4"
|
||||
|
||||
babel-types@6.23.0:
|
||||
version "6.23.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
|
||||
babel-types@6.26.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
|
||||
dependencies:
|
||||
babel-runtime "^6.22.0"
|
||||
babel-runtime "^6.26.0"
|
||||
esutils "^2.0.2"
|
||||
lodash "^4.2.0"
|
||||
to-fast-properties "^1.0.1"
|
||||
lodash "^4.17.4"
|
||||
to-fast-properties "^1.0.3"
|
||||
|
||||
babel-types@7.0.0-beta.0:
|
||||
version "7.0.0-beta.0"
|
||||
|
@ -1107,15 +1107,6 @@ babel-types@7.0.0-beta.0:
|
|||
lodash "^4.2.0"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
|
||||
version "6.26.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
|
||||
dependencies:
|
||||
babel-runtime "^6.26.0"
|
||||
esutils "^2.0.2"
|
||||
lodash "^4.17.4"
|
||||
to-fast-properties "^1.0.3"
|
||||
|
||||
babylon@7.0.0-beta.22:
|
||||
version "7.0.0-beta.22"
|
||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.22.tgz#74f0ad82ed7c7c3cfeab74cf684f815104161b65"
|
||||
|
@ -1693,9 +1684,9 @@ conventional-commits-parser@^2.0.0:
|
|||
through2 "^2.0.0"
|
||||
trim-off-newlines "^1.0.0"
|
||||
|
||||
convert-source-map@1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
|
||||
convert-source-map@1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
|
||||
|
||||
convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0:
|
||||
version "1.5.0"
|
||||
|
@ -5829,6 +5820,10 @@ source-map@0.5.6:
|
|||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
|
||||
|
||||
source-map@0.6.1, source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
|
||||
source-map@^0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
|
||||
|
@ -5839,10 +5834,6 @@ source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3, sour
|
|||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
|
||||
source-map@^0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
|
||||
sourcemapped-stacktrace@^1.1.6:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.7.tgz#17e05374ff78b71a9d89ad3975a49f22725ba935"
|
||||
|
@ -5977,9 +5968,9 @@ stream-to-observable@^0.1.0:
|
|||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"
|
||||
|
||||
string-hash@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.1.tgz#8e85bed291e0763b8f6809d9c3368fea048db3dc"
|
||||
string-hash@1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
|
||||
|
||||
string-length@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
@ -6031,18 +6022,18 @@ stringstream@~0.0.4, stringstream@~0.0.5:
|
|||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
|
||||
|
||||
strip-ansi@4.0.0, strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-bom@3.0.0, strip-bom@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||
|
@ -6071,25 +6062,25 @@ 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.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-2.2.1.tgz#8b38b9e53e5d9767e392595ab1afdc8426b3ba5d"
|
||||
dependencies:
|
||||
babel-plugin-syntax-jsx "6.18.0"
|
||||
babel-types "6.23.0"
|
||||
convert-source-map "1.3.0"
|
||||
source-map "0.5.6"
|
||||
string-hash "1.1.1"
|
||||
stylis "3.3.2"
|
||||
stylis-rule-sheet "0.0.6"
|
||||
babel-types "6.26.0"
|
||||
convert-source-map "1.5.1"
|
||||
source-map "0.6.1"
|
||||
string-hash "1.1.3"
|
||||
stylis "3.4.5"
|
||||
stylis-rule-sheet "0.0.7"
|
||||
|
||||
stylis-rule-sheet@0.0.6:
|
||||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.6.tgz#059f89125a8e8db546e8adb0e07c4b4bcb81911b"
|
||||
stylis-rule-sheet@0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.7.tgz#5c51dc879141a61821c2094ba91d2cbcf2469c6c"
|
||||
|
||||
stylis@3.3.2:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.3.2.tgz#95ef285836e98243f8b8f64a9a72706ea6c893ea"
|
||||
stylis@3.4.5:
|
||||
version "3.4.5"
|
||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.5.tgz#d7b9595fc18e7b9c8775eca8270a9a1d3e59806e"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
|
@ -6245,7 +6236,7 @@ to-arraybuffer@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
|
||||
|
||||
to-fast-properties@^1.0.1, to-fast-properties@^1.0.3:
|
||||
to-fast-properties@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
|
||||
|
||||
|
|
Loading…
Reference in a new issue