TypeORMError: Connection is not established with mysql database

来源:6-1 CSR渲染标签管理列表

weixin_慕斯4243761

2023-01-24

多次在首页和标签页快速切换会报这个错误

写回答

4回答

vincentchanhk

2023-04-08

其实不是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
0

Tomas

2023-01-25

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

1
1
weixin_慕斯4243761
这个是typeorm的问题,next这里在ssr回调中不能直接调用数据库连接,可以在ssr回调中通过调取自身api,在api中调取数据库,例如: export async function getServerSideProps() { const result = await fetch.post({ // 标记 url: `${SERVER_BASEURL}/api/article/gets`, }); let articles = []; if (result && result.status === 200) { articles = result.data.data.articles; } return { props: { articles, }, }; }
2023-01-26
共1条回复

Tomas

2023-04-10

感谢同学的解答ha

0
0

Tomas

2023-01-28

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

0
0

Next.js+React+Node系统实战,搞定SSR服务器渲染

Next.js+React+Node系统实战,搞定SSR服务器渲染

421 学习 · 144 问题

查看课程