Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CoCo_Code_Op2
next.js
提交
87ff667e
N
next.js
项目概览
CoCo_Code_Op2
/
next.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
next.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
87ff667e
编写于
4月 02, 2017
作者:
A
Arunoda Susiripala
提交者:
Guillermo Rauch
4月 01, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "Introduce better debug error handling (#1590)" (#1591)
This reverts commit
0bdd3216
.
上级
0bdd3216
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
20 addition
and
58 deletion
+20
-58
client/index.js
client/index.js
+11
-38
client/next-dev.js
client/next-dev.js
+6
-13
lib/app.js
lib/app.js
+2
-1
server/document.js
server/document.js
+1
-6
未找到文件。
client/index.js
浏览文件 @
87ff667e
...
...
@@ -6,7 +6,6 @@ import { createRouter } from '../lib/router'
import
App
from
'
../lib/app
'
import
evalScript
from
'
../lib/eval-script
'
import
{
loadGetInitialProps
,
getURL
}
from
'
../lib/utils
'
import
ErrorDebugComponent
from
'
../lib/error-debug
'
// Polyfill Promise globally
// This is needed because Webpack2's dynamic loading(common chunks) code
...
...
@@ -40,57 +39,33 @@ export const router = createRouter(pathname, query, getURL(), {
})
const
headManager
=
new
HeadManager
()
const
appContainer
=
document
.
getElementById
(
'
__next
'
)
const
errorContainer
=
document
.
getElementById
(
'
__next-error
'
)
const
container
=
document
.
getElementById
(
'
__next
'
)
export
default
()
=>
{
export
default
(
onError
)
=>
{
const
emitter
=
mitt
()
router
.
subscribe
(({
Component
,
props
,
hash
,
err
})
=>
{
render
({
Component
,
props
,
err
,
hash
,
emitter
})
render
({
Component
,
props
,
err
,
hash
,
emitter
}
,
onError
)
})
const
hash
=
location
.
hash
.
substring
(
1
)
render
({
Component
,
props
,
hash
,
err
,
emitter
})
render
({
Component
,
props
,
hash
,
err
,
emitter
}
,
onError
)
return
emitter
}
export
async
function
render
(
props
)
{
if
(
props
.
err
)
{
await
renderError
(
props
.
err
)
return
}
export
async
function
render
(
props
,
onError
=
renderErrorComponent
)
{
try
{
await
doRender
(
props
)
}
catch
(
err
)
{
if
(
err
.
abort
)
return
await
renderError
(
err
)
await
onError
(
err
)
}
}
// This method handles all runtime and debug errors.
// 404 and 500 errors are special kind of errors
// and they are still handle via the main render method.
export
async
function
renderError
(
error
)
{
const
prod
=
process
.
env
.
NODE_ENV
===
'
production
'
// We need to unmount the current app component because it's
// in the inconsistant state.
// Otherwise, we need to face issues when the issue is fixed and
// it's get notified via HMR
ReactDOM
.
unmountComponentAtNode
(
appContainer
)
const
errorMessage
=
`
${
error
.
message
}
\n
${
error
.
stack
}
`
console
.
error
(
errorMessage
)
if
(
prod
)
{
const
initProps
=
{
err
:
error
,
pathname
,
query
}
const
props
=
await
loadGetInitialProps
(
ErrorComponent
,
initProps
)
ReactDOM
.
render
(
createElement
(
ErrorComponent
,
props
),
errorContainer
)
}
else
{
ReactDOM
.
render
(
createElement
(
ErrorDebugComponent
,
{
error
}),
errorContainer
)
}
async
function
renderErrorComponent
(
err
)
{
const
{
pathname
,
query
}
=
router
const
props
=
await
loadGetInitialProps
(
ErrorComponent
,
{
err
,
pathname
,
query
})
await
doRender
({
Component
:
ErrorComponent
,
props
,
err
})
}
async
function
doRender
({
Component
,
props
,
hash
,
err
,
emitter
})
{
...
...
@@ -113,9 +88,7 @@ async function doRender ({ Component, props, hash, err, emitter }) {
// lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.
lastAppProps
=
appProps
// We need to clear any existing runtime error messages
ReactDOM
.
unmountComponentAtNode
(
errorContainer
)
ReactDOM
.
render
(
createElement
(
App
,
appProps
),
appContainer
)
ReactDOM
.
render
(
createElement
(
App
,
appProps
),
container
)
if
(
emitter
)
{
emitter
.
emit
(
'
after-reactdom-render
'
,
{
Component
})
...
...
client/next-dev.js
浏览文件 @
87ff667e
import
evalScript
from
'
../lib/eval-script
'
import
ReactReconciler
from
'
react-dom/lib/ReactReconciler
'
const
{
__NEXT_DATA__
:
{
errorComponent
}
}
=
window
const
ErrorComponent
=
evalScript
(
errorComponent
).
default
...
...
@@ -8,18 +7,12 @@ require('react-hot-loader/patch')
const
next
=
window
.
next
=
require
(
'
./
'
)
const
emitter
=
next
.
default
()
// This is a patch to catch most of the errors throw inside React components.
const
originalMountComponent
=
ReactReconciler
.
mountComponent
ReactReconciler
.
mountComponent
=
function
(...
args
)
{
try
{
return
originalMountComponent
(...
args
)
}
catch
(
err
)
{
next
.
renderError
(
err
)
err
.
abort
=
true
throw
err
}
const
emitter
=
next
.
default
(
onError
)
function
onError
(
err
)
{
// just show the debug screen but don't render ErrorComponent
// so that the current component doesn't lose props
next
.
render
({
err
,
emitter
})
}
let
lastScroll
...
...
lib/app.js
浏览文件 @
87ff667e
...
...
@@ -17,7 +17,7 @@ export default class App extends Component {
}
render
()
{
const
{
Component
,
props
,
hash
,
router
}
=
this
.
props
const
{
Component
,
props
,
hash
,
err
,
router
}
=
this
.
props
const
url
=
createUrl
(
router
)
// If there no component exported we can't proceed.
// We'll tackle that here.
...
...
@@ -28,6 +28,7 @@ export default class App extends Component {
return
<
div
>
<
Container
{...
containerProps
}
/
>
{
ErrorDebug
&&
err
?
<
ErrorDebug
error
=
{
err
}
/> : null
}
<
/div
>
}
}
...
...
server/document.js
浏览文件 @
87ff667e
...
...
@@ -50,12 +50,7 @@ export class Main extends Component {
render
()
{
const
{
html
}
=
this
.
context
.
_documentProps
return
(
<
div
>
<
div
id
=
'
__next
'
dangerouslySetInnerHTML
=
{{
__html
:
html
}}
/
>
<
div
id
=
'
__next-error
'
/>
<
/div
>
)
return
<
div
id
=
'
__next
'
dangerouslySetInnerHTML
=
{{
__html
:
html
}}
/
>
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录