微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 next-connect 在 Next.js 中处理 getServerSideProps 中的错误

如何解决如何使用 next-connect 在 Next.js 中处理 getServerSideProps 中的错误

我使用 Next.js 和 next-connect 来处理中间件。

但是当我在 getServerSideProps 中使用多个中间件时,我在尝试处理错误时遇到了问题。

这是我在 getServerSideProps 中的代码,我刚刚使用几个中间件创建了一个处理程序,然后所有中间件都运行,身份验证成功并且用户数据应该传递给响应,但如果有任何失败,错误应该被捕获并返回到 '/login' 页面重定向

import nextConnect from 'next-connect';
import { openDBConnection,retrieveUserInfo } from '@/middlewares/database';
import { verifySessionCookie } from '@/middlewares/firebaseSession';
...
    export const getServerSideProps = async ({ req,res }) => {
        const handler = nextConnect()
            .use(verifySessionCookie)
            .use(openDBConnection)
            .use(retrieveUserInfo);
        try {
            await handler.run(req,res);
            return {
                props: {
                    user: req.user,},};
        } catch (e) {
            console.log(e);
            return {
                redirect: {
                    destination: '/login',permanent: false,}
            };
        }
    }

我没有在任何中间件中定义任何 try/catch 块,因此如果发生错误,可以在任何 api 页面或 getServerSideProps 块中处理。

当只有一个中间件 verifySessionCookie 时,每个似乎都可以,当调用 await handler.run(req,res) 时返回错误,然后在 catch 块中处理。

但是当使用代码段中显示的 3 个中间件时,如果第一个中间件失败 (verifySessionCookie),则不会在 catch 块中处理错误

我尝试在每个中间件中调用 next(),使用 finally 子句),这样错误就会在 getServerSideProps 中被捕获,但是:

  • verifySessionCookie 执行,但失败。
  • openDBConnection 执行,它不会失败。
  • retrieveUserInfo 执行,但失败。

也许我在这里做错了什么,或者 next-connect 不打算以这种方式使用。我不知道如果一个中间件和其他所有中间件都没有执行,我该如何处理错误。也许我应该在 getServerSideProps 中使用 (req,res) 参数调用独立的异步函数,并停止使用这个 next-connect 插件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?