请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

TypeORMError: Connection is not established with mysql database

正在回答 回答被采纳积分+3

4回答

vincentchanhk 2023-04-08 11:38:10

其实不是typeorm问题, 是因为nextjs用了HMR 导致lifecycle和传统nodejs的server side应用不同,从而影响了connection的状态,有机会变成stale Connection

而原本的connection managment只看connectionReadyPromise不是undefined就直接返回,因为connectionReadyPromise是Promise,赋值了之后基本不会undefined,这里很大机会出现该connection其实已经被废弃,而我们又从其中使用该废弃了的connection,到我们再用该connection访问DB就出现了该问题了。

总结来看,就是nextjs的HMR影响了lifecycle,导致connection释放异常,我们再用的话就出现问题。

解决办法,要么每次都create一条新的connection,
要么每次使用都查看一下connection.isConnected ,如果没有connected就call connect方法。

2 回复 有任何疑惑可以回复我~
Tomas 2023-01-25 22:22:13

可以断点排查下数据库是否链接成功哈

1 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕斯4243761 #1
    这个是typeorm的问题,next这里在ssr回调中不能直接调用数据库连接,可以在ssr回调中通过调取自身api,在api中调取数据库,例如:
    export async function getServerSideProps() {
      const result = await fetch.post<ResponseDataer>({
        // 标记
        url: `${SERVER_BASEURL}/api/article/gets`,
      });
      let articles = [];
      if (result && result.status === 200) {
        articles = result.data.data.articles;
      }
      return {
        props: {
          articles,
        },
      };
    }
    回复 有任何疑惑可以回复我~ 2023-01-26 18:26:57
Tomas 2023-04-10 18:20:43

感谢同学的解答ha

0 回复 有任何疑惑可以回复我~
Tomas 2023-01-28 10:22:13

感谢同学的解答 其他同学有遇到这个问题可以参考一下哈

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信