Next.js中getServerSideProps里怎么正确调用异步API并处理错误?
我在用Next.js做服务端渲染,想在getServerSideProps里请求用户数据,但一遇到网络错误页面就直接挂了,试过try/catch好像也不起作用。
这是我的代码:
export async function getServerSideProps() {
const res = await fetch('https://api.example.com/user/123');
const user = await res.json();
return { props: { user } };
}
有没有人知道该怎么安全地处理这种异步请求的异常?比如返回默认值或者重定向到错误页?
我建议这样改:在fetch后立即检查response的状态码,如果状态码不是200就直接抛出错误。然后再用try/catch包裹整个逻辑。
下面是个改进版的实现:
这段代码会处理三种情况:正常的成功响应、非200的状态码、以及纯粹的网络错误。根据具体情况你可以把redirect改成返回默认值或者其它错误处理方式。
说实话这个坑我也踩过,Next.js的SSR调试起来真让人头疼,特别是这种异步问题。不过按上面的方法应该能解决你的问题了。
这里有两个关键点:一是检查 res.ok 来判断请求是否成功,二是通过 catch 捕获所有异常。如果出错就返回一个错误信息,并且可以设置重定向到错误页面。
这方法在实际项目中验证过,能有效避免页面直接崩溃。不过要注意的是,redirect 只能在某些情况下使用,具体看你的需求。要是不想跳转,也可以只返回 error 字段来显示错误提示。