mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
dec85fe6c4
* Introduce script tag based page loading system. * Call ensurePage only in the dev mode. * Implement router using the page-loader. * Fix a typo and remove unwanted code. * Fix some issues related to rendering. * Fix production tests. * Fix ondemand test cases. * Fix unit tests. * Get rid of eval completely. * Remove all the inline code. * Remove the json-pages plugin. * Rename NEXT_PAGE_LOADER into __NEXT_PAGE_LOADER__ * Rename NEXT_LOADED_PAGES into __NEXT_LOADED_PAGES__ * Remove some unwanted code. * Load everything async. * Remove lib/eval-script.js We no longer need it. * Move webpack idle wait code to the page-loader. Because that's the place to do it. * Remove pageNotFound key from the error. * Remove unused error field 'buildError' * Add much better logic to normalize routes. * Get rid of mitt. * Introduce a better way to register pages. * Came back to the mitt() based page-loader. * Add link rel=preload support. * Add assetPrefix support to add support for CDNs. * Add assetPrefix support for preload links. * Update readme.md
71 lines
1.7 KiB
JavaScript
71 lines
1.7 KiB
JavaScript
import React from 'react'
|
|
import HTTPStatus from 'http-status'
|
|
import Head from './head'
|
|
|
|
export default class Error extends React.Component {
|
|
static getInitialProps ({ res, err }) {
|
|
const statusCode = res ? res.statusCode : (err ? err.statusCode : null)
|
|
return { statusCode }
|
|
}
|
|
|
|
render () {
|
|
const { statusCode } = this.props
|
|
const title = statusCode === 404
|
|
? 'This page could not be found'
|
|
: HTTPStatus[statusCode] || 'An unexpected error has occurred'
|
|
|
|
return <div style={styles.error}>
|
|
<Head>
|
|
<meta name='viewport' content='width=device-width, initial-scale=1.0' />
|
|
</Head>
|
|
<div>
|
|
<style dangerouslySetInnerHTML={{ __html: 'body { margin: 0 }' }} />
|
|
{statusCode ? <h1 style={styles.h1}>{statusCode}</h1> : null}
|
|
<div style={styles.desc}>
|
|
<h2 style={styles.h2}>{title}.</h2>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
}
|
|
|
|
const styles = {
|
|
error: {
|
|
color: '#000',
|
|
background: '#fff',
|
|
fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", "Fira Sans", Avenir, "Helvetica Neue", "Lucida Grande", sans-serif',
|
|
height: '100vh',
|
|
textAlign: 'center',
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
justifyContent: 'center'
|
|
},
|
|
|
|
desc: {
|
|
display: 'inline-block',
|
|
textAlign: 'left',
|
|
lineHeight: '49px',
|
|
height: '49px',
|
|
verticalAlign: 'middle'
|
|
},
|
|
|
|
h1: {
|
|
display: 'inline-block',
|
|
borderRight: '1px solid rgba(0, 0, 0,.3)',
|
|
margin: 0,
|
|
marginRight: '20px',
|
|
padding: '10px 23px 10px 0',
|
|
fontSize: '24px',
|
|
fontWeight: 500,
|
|
verticalAlign: 'top'
|
|
},
|
|
|
|
h2: {
|
|
fontSize: '14px',
|
|
fontWeight: 'normal',
|
|
margin: 0,
|
|
padding: 0
|
|
}
|
|
}
|