使用 Axios 检测 Nextjs API 路由的错误

Posted

技术标签:

【中文标题】使用 Axios 检测 Nextjs API 路由的错误【英文标题】:detecting error for Nextjs API route with Axios 【发布时间】:2021-07-16 03:18:32 【问题描述】:

我正在使用 nextjs api/routes 我有一个登录名,当出现问题时返回一个 401 和我想向用户显示的消息文本。

一个最小的例子是:

API:/api/v1/auth/sigin.js

export default async (req, res) => 
const  name, password  = req.body;
const url = process.env.SH_API_BASEURL + 'auth/signin';
console.log(url);

try 
    const resp = await axios.patch(url,  name, password );
    return res.status(200).send(resp.data);
 catch (err) 
    const  response  = err;
    const status = response.status;
    const message = response.data.errors[0].message;
    console.log(`status: $status, message $message`);
    return res.status(status).send(message);

;

页面/pages/auth/signin.js

const handleFormSubmit = async (formData, e) => 
    e.preventDefault();
    try 
        const res = await axios.post('/api/v1/auth/signin', formData);
        

        router.push('/secure/home');
     catch (err) 
        console.log('pages auth in error');
        console.log(err);
        setSubmitError(true);
        console.log('sigin handle submit error');
        
    
;

console.log(err) 显示输出

Error: Request failed with status code 401
at createError (createError.js:16)
at settle (settle.js:17)
at XMLHttpRequest.handleLoad (xhr.js:62)

如何访问页面代码中的 statusCode 和文本?

任何答案都可以在 nextjs api/routes 的上下文中

谢谢

【问题讨论】:

这个:***.com/questions/44806333/… 回答你的问题吗? 这能回答你的问题吗? How can I get the status code from an http error in Axios? 【参考方案1】:

可以访问axios错误的response属性来获取状态

const handleFormSubmit = async (formData, e) => 
    e.preventDefault();
    try 
        const res = await axios.post('/api/v1/auth/signin', formData);
        router.push('/secure/home');
     catch (err) 
        console.log(err.response.status);
    
;

【讨论】:

非常感谢我通过记录 err 对象来寻找结构的初始值。

以上是关于使用 Axios 检测 Nextjs API 路由的错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NextJS 中为 getStaticProps 导入 API 路由?

无法使用 NextJS 9 的 API 路由设置 cookie

Next Js - 如何从需要授权的api中检索数据(通过axios)?

Nextjs 中使用 getServerSideProps 进行动态路由

如何隐藏通过 url 直接访问的 nextjs api 路由?

Redux 商店使用 nextJS 自行重置路由更改