我试图在错误发生时捕获更多细节。
当错误发生时,我使用节点 api 服务器捕获错误并保存在日志文件中。
我模拟了一个网络错误并尽可能多地获取详细信息。
当我 console.log 前端的错误时,我得到了这个:
withFormHandler.js:28 Uncaught Error: Error: Network Error
at Object.componentDidUpdate (withFormHandler.js:28)
...
但我无法使用我的 api 发送此信息。我进入服务器端的所有内容都是一个空对象。
那么我怎样才能捕获并发送尽可能多的关于错误的详细信息并将其写入日志文件呢?
这是我的 ErrorBoundry 组件:
class ErrorBoundary extends React.Component {
state = {
hasError: false,
error: { message: "", stack: "" },
info: { componentStack: "" },
};
static getDerivedStateFromError = (error) => {
return { hasError: true };
};
componentDidCatch = (error, info) => {
this.setState({ error, info });
axios
.get(`http://localhost:5001/api/logs/error`, {
params: {
error: error.message,
details: info,
// details:error ---> this is also not give me information i need
},
})
.catch(() => {});
};
render() {
const { hasError, error, info } = this.state;
const { children } = this.props;
return hasError ? <ErrorComponent message={error.message} /> : children;
}
}
这是服务器端句柄:
router.get("/error", (req, res) => {
const errorMessage = req.query.error;
const details = req.query.details; -----> return an empty object :(
const logFile = "./logs/debug.log";
if (errorMessage) {
let error = errorMessage + "\r\n" + details;
fs.appendFile(logFile, error, function (err) {
// callback or something
});
}
});