ThinkJS3升级之路

本文详细记录了从ThinkJS2升级到ThinkJS3的过程,包括升级的原因、遇到的问题及解决方案。作者分享了数据库选择、代码结构调整、工作流简化、智能提示增强和定时任务管理等方面的思考和实践,总结了升级的感受并提出了后续的优化建议。

是否要升级

CmPage后端的NodeJS框架,当初选择的是ThinkJS,主要是用async/await的写法比较符合一般的思维习惯,也适合写一些比较复杂的业务逻辑,ThinkJS升级到版本3.x以后,基于koa2进行了重构,和之前的版本改动还是蛮大的,之前也曾经考虑想采用过Egg.JS,不过所需时间成本应该会比较大。CmPage是否要升级的问题,答案其实是明确的,只能跟着走呗,难道要自己去维护ThinkJS2。有的时候实际项目中也经常会碰到类似情况,很无奈啊,大部分开源项目都是小众的,重构的频率比商用系统要快得多。
当然升级到ThinkJS3后,可以更方便地采用各种koa的资源,也可以多一些选择,说干就干,利用国庆被堵在家里的时间做点有意思的事情(有意义还不好说^-^)。

升级杂项

  1. 关于数据库的选择,之前CmPage考虑了多种数据库,主要测试了Mysql、PostgreSql和MSSQL(ORM采用的是sequelize),直接写SQL语句的话还是有不少区别的,数据类型的格式处理也有差异。考虑到cmpage还是个比较新的项目,数据库改为支持mysql,插件采用think-model-mysql,等框架的功能齐全和稳定后再考虑其他的数据库类型;
  2. 关于cmpage和应用系统的代码分离,稍微大一点的企业,他的IT信息化应用都会有多方面的需求,我们就可能会构建多个系统,由不同的团队进行维护,这样如果cmpage升级的话就比较麻烦。之前考虑EggJS也是这个原因,据其文档说可以方便地进行框架和插件的开发,试了一下也不是很方便,还是需要踩坑(总的来说还是时间不够,ps:程序员的焦虑),但话又说回来,目前开发业务系统的过程中还是需要随时查看框架的代码,甚至改改弄弄什么的才能较好地进行调试。
    因此和数据库的选择一样,考虑东西太多了就会束手束脚,还是暂不考虑。
  3. 关于工作流的考虑同上,先实现简单的状态流转类的工作流,而且是面向开发人员的,当然cmpage本身就是面向开发人员的,非傻瓜式。
  4. 修改继承类 think.controller.base, think.logic.base,thin
F:\vue3new\Ch-08\shop-backend>npm start > shop-backend@1.0.0 start > node development.js [2025-06-01T12:06:07.254] [34872] [INFO] - Server running at http://127.0.0.1:8360 [2025-06-01T12:07:45.601] [34872] [INFO] - ThinkJS version: 3.2.15 [2025-06-01T12:07:45.602] [34872] [INFO] - Environment: development [2025-06-01T12:07:45.602] [34872] [INFO] - Workers: 1 [2025-06-01T12:07:57.318] [30344] [INFO] - mysql://root:123456@127.0.0.1:3306/vueshop Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Handshake.Sequence._packetToError (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) at Handshake.ErrorPacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) at Protocol._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:43:10) at Protocol.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:38:16) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:88:28) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:526:10) at Socket.emit (node:events:507:28) at addChunk (node:internal/streams/readable:559:12) -------------------- at Protocol._enqueue (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:51:23) at PoolConnection.connect (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:116:18) at Pool.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Pool.js:48:16) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:83:10 at new Promise (<anonymous>) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:82:12 at ThinkMysql.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:89:69) at F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:229:21 at F:\vue3new\Ch-08\shop-backend\node_modules\think-debounce\index.js:19:16 { code: &#39;ER_NOT_SUPPORTED_AUTH_MODE&#39;, errno: 1251, sqlMessage: &#39;Client does not support authentication protocol requested by server; consider upgrading MySQL client&#39;, sqlState: &#39;08004&#39;, fatal: true } { request: { method: &#39;GET&#39;, url: &#39;/&#39;, header: { host: &#39;127.0.0.1:8360&#39;, connection: &#39;keep-alive&#39;, &#39;sec-ch-ua&#39;: &#39;"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"&#39;, &#39;sec-ch-ua-mobile&#39;: &#39;?0&#39;, &#39;sec-ch-ua-platform&#39;: &#39;"Windows"&#39;, &#39;upgrade-insecure-requests&#39;: &#39;1&#39;, &#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0&#39;, accept: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7&#39;, &#39;sec-fetch-site&#39;: &#39;none&#39;, &#39;sec-fetch-mode&#39;: &#39;navigate&#39;, &#39;sec-fetch-user&#39;: &#39;?1&#39;, &#39;sec-fetch-dest&#39;: &#39;document&#39;, &#39;accept-encoding&#39;: &#39;gzip, deflate, br, zstd&#39;, &#39;accept-language&#39;: &#39;zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6&#39; } }, response: { status: 200, message: &#39;OK&#39;, header: [Object: null prototype] { &#39;x-powered-by&#39;: &#39;thinkjs-3.2.15&#39; } }, app: { subdomainOffset: 2, proxy: false, env: &#39;development&#39; }, originalUrl: &#39;/&#39;, req: &#39;<original node req>&#39;, res: &#39;<original node res>&#39;, socket: &#39;<original node socket>&#39; } [2025-06-01T12:07:57.335] [30344] [INFO] - GET / 500 680ms [2025-06-01T12:07:57.533] [30344] [INFO] - GET /favicon.ico 404 2ms Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Handshake.Sequence._packetToError (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) at Handshake.ErrorPacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) at Protocol._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:43:10) at Protocol.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:38:16) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:88:28) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:526:10) at Socket.emit (node:events:507:28) at addChunk (node:internal/streams/readable:559:12) -------------------- at Protocol._enqueue (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:51:23) at PoolConnection.connect (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:116:18) at Pool.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Pool.js:48:16) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:83:10 at new Promise (<anonymous>) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:82:12 at ThinkMysql.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:89:69) at F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:229:21 at F:\vue3new\Ch-08\shop-backend\node_modules\think-debounce\index.js:19:16 { code: &#39;ER_NOT_SUPPORTED_AUTH_MODE&#39;, errno: 1251, sqlMessage: &#39;Client does not support authentication protocol requested by server; consider upgrading MySQL client&#39;, sqlState: &#39;08004&#39;, fatal: true } { request: { method: &#39;GET&#39;, url: &#39;/&#39;, header: { host: &#39;127.0.0.1:8360&#39;, connection: &#39;keep-alive&#39;, &#39;cache-control&#39;: &#39;max-age=0&#39;, &#39;sec-ch-ua&#39;: &#39;"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"&#39;, &#39;sec-ch-ua-mobile&#39;: &#39;?0&#39;, &#39;sec-ch-ua-platform&#39;: &#39;"Windows"&#39;, &#39;upgrade-insecure-requests&#39;: &#39;1&#39;, &#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0&#39;, accept: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7&#39;, &#39;sec-fetch-site&#39;: &#39;none&#39;, &#39;sec-fetch-mode&#39;: &#39;navigate&#39;, &#39;sec-fetch-user&#39;: &#39;?1&#39;, &#39;sec-fetch-dest&#39;: &#39;document&#39;, &#39;accept-encoding&#39;: &#39;gzip, deflate, br, zstd&#39;, &#39;accept-language&#39;: &#39;zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6&#39; } }, response: { status: 200, message: &#39;OK&#39;, header: [Object: null prototype] { &#39;x-powered-by&#39;: &#39;thinkjs-3.2.15&#39; } }, app: { subdomainOffset: 2, proxy: false, env: &#39;development&#39; }, originalUrl: &#39;/&#39;, req: &#39;<original node req>&#39;, res: &#39;<original node res>&#39;, socket: &#39;<original node socket>&#39; } [2025-06-01T12:08:21.584] [30344] [INFO] - GET / 500 12ms Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Handshake.Sequence._packetToError (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) at Handshake.ErrorPacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) at Protocol._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:43:10) at Protocol.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:38:16) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:88:28) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:526:10) at Socket.emit (node:events:507:28) at addChunk (node:internal/streams/readable:559:12) -------------------- at Protocol._enqueue (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:51:23) at PoolConnection.connect (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:116:18) at Pool.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Pool.js:48:16) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:83:10 at new Promise (<anonymous>) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:82:12 at ThinkMysql.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:89:69) at F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:229:21 at F:\vue3new\Ch-08\shop-backend\node_modules\think-debounce\index.js:19:16 { code: &#39;ER_NOT_SUPPORTED_AUTH_MODE&#39;, errno: 1251, sqlMessage: &#39;Client does not support authentication protocol requested by server; consider upgrading MySQL client&#39;, sqlState: &#39;08004&#39;, fatal: true } { request: { method: &#39;GET&#39;, url: &#39;/&#39;, header: { host: &#39;127.0.0.1:8360&#39;, connection: &#39;keep-alive&#39;, &#39;cache-control&#39;: &#39;max-age=0&#39;, &#39;sec-ch-ua&#39;: &#39;"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"&#39;, &#39;sec-ch-ua-mobile&#39;: &#39;?0&#39;, &#39;sec-ch-ua-platform&#39;: &#39;"Windows"&#39;, &#39;upgrade-insecure-requests&#39;: &#39;1&#39;, &#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0&#39;, accept: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7&#39;, &#39;sec-fetch-site&#39;: &#39;none&#39;, &#39;sec-fetch-mode&#39;: &#39;navigate&#39;, &#39;sec-fetch-user&#39;: &#39;?1&#39;, &#39;sec-fetch-dest&#39;: &#39;document&#39;, &#39;accept-encoding&#39;: &#39;gzip, deflate, br, zstd&#39;, &#39;accept-language&#39;: &#39;zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6&#39; } }, response: { status: 200, message: &#39;OK&#39;, header: [Object: null prototype] { &#39;x-powered-by&#39;: &#39;thinkjs-3.2.15&#39; } }, app: { subdomainOffset: 2, proxy: false, env: &#39;development&#39; }, originalUrl: &#39;/&#39;, req: &#39;<original node req>&#39;, res: &#39;<original node res>&#39;, socket: &#39;<original node socket>&#39; } [2025-06-01T12:08:22.177] [30344] [INFO] - GET / 500 11ms Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Handshake.Sequence._packetToError (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) at Handshake.ErrorPacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) at Protocol._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:43:10) at Protocol.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:38:16) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:88:28) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:526:10) at Socket.emit (node:events:507:28) at addChunk (node:internal/streams/readable:559:12) -------------------- at Protocol._enqueue (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:51:23) at PoolConnection.connect (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:116:18) at Pool.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Pool.js:48:16) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:83:10 at new Promise (<anonymous>) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:82:12 at ThinkMysql.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:89:69) at F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:229:21 at F:\vue3new\Ch-08\shop-backend\node_modules\think-debounce\index.js:19:16 { code: &#39;ER_NOT_SUPPORTED_AUTH_MODE&#39;, errno: 1251, sqlMessage: &#39;Client does not support authentication protocol requested by server; consider upgrading MySQL client&#39;, sqlState: &#39;08004&#39;, fatal: true } { request: { method: &#39;GET&#39;, url: &#39;/&#39;, header: { host: &#39;127.0.0.1:8360&#39;, connection: &#39;keep-alive&#39;, &#39;cache-control&#39;: &#39;max-age=0&#39;, &#39;sec-ch-ua&#39;: &#39;"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"&#39;, &#39;sec-ch-ua-mobile&#39;: &#39;?0&#39;, &#39;sec-ch-ua-platform&#39;: &#39;"Windows"&#39;, &#39;upgrade-insecure-requests&#39;: &#39;1&#39;, &#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0&#39;, accept: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7&#39;, &#39;sec-fetch-site&#39;: &#39;none&#39;, &#39;sec-fetch-mode&#39;: &#39;navigate&#39;, &#39;sec-fetch-user&#39;: &#39;?1&#39;, &#39;sec-fetch-dest&#39;: &#39;document&#39;, &#39;accept-encoding&#39;: &#39;gzip, deflate, br, zstd&#39;, &#39;accept-language&#39;: &#39;zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6&#39; } }, response: { status: 200, message: &#39;OK&#39;, header: [Object: null prototype] { &#39;x-powered-by&#39;: &#39;thinkjs-3.2.15&#39; } }, app: { subdomainOffset: 2, proxy: false, env: &#39;development&#39; }, originalUrl: &#39;/&#39;, req: &#39;<original node req>&#39;, res: &#39;<original node res>&#39;, socket: &#39;<original node socket>&#39; } [2025-06-01T12:12:46.861] [30344] [INFO] - GET / 500 7ms Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client at Handshake.Sequence._packetToError (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) at Handshake.ErrorPacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18) at Protocol._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:291:23) at Parser._parsePacket (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:433:10) at Parser.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Parser.js:43:10) at Protocol.write (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:38:16) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:88:28) at Socket.<anonymous> (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:526:10) at Socket.emit (node:events:507:28) at addChunk (node:internal/streams/readable:559:12) -------------------- at Protocol._enqueue (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:144:48) at Protocol.handshake (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\protocol\Protocol.js:51:23) at PoolConnection.connect (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Connection.js:116:18) at Pool.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\mysql\lib\Pool.js:48:16) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:83:10 at new Promise (<anonymous>) at F:\vue3new\Ch-08\shop-backend\node_modules\think-helper\index.js:82:12 at ThinkMysql.getConnection (F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:89:69) at F:\vue3new\Ch-08\shop-backend\node_modules\think-mysql\index.js:229:21 at F:\vue3new\Ch-08\shop-backend\node_modules\think-debounce\index.js:19:16 { code: &#39;ER_NOT_SUPPORTED_AUTH_MODE&#39;, errno: 1251, sqlMessage: &#39;Client does not support authentication protocol requested by server; consider upgrading MySQL client&#39;, sqlState: &#39;08004&#39;, fatal: true } { request: { method: &#39;GET&#39;, url: &#39;/&#39;, header: { host: &#39;127.0.0.1:8360&#39;, connection: &#39;keep-alive&#39;, &#39;cache-control&#39;: &#39;max-age=0&#39;, &#39;sec-ch-ua&#39;: &#39;"Microsoft Edge";v="137", "Chromium";v="137", "Not/A)Brand";v="24"&#39;, &#39;sec-ch-ua-mobile&#39;: &#39;?0&#39;, &#39;sec-ch-ua-platform&#39;: &#39;"Windows"&#39;, &#39;upgrade-insecure-requests&#39;: &#39;1&#39;, &#39;user-agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0&#39;, accept: &#39;text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7&#39;, &#39;sec-fetch-site&#39;: &#39;none&#39;, &#39;sec-fetch-mode&#39;: &#39;navigate&#39;, &#39;sec-fetch-user&#39;: &#39;?1&#39;, &#39;sec-fetch-dest&#39;: &#39;document&#39;, &#39;accept-encoding&#39;: &#39;gzip, deflate, br, zstd&#39;, &#39;accept-language&#39;: &#39;zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6&#39; } }, response: { status: 200, message: &#39;OK&#39;, header: [Object: null prototype] { &#39;x-powered-by&#39;: &#39;thinkjs-3.2.15&#39; } }, app: { subdomainOffset: 2, proxy: false, env: &#39;development&#39; }, originalUrl: &#39;/&#39;, req: &#39;<original node req>&#39;, res: &#39;<original node res>&#39;, socket: &#39;<original node socket>&#39; } [2025-06-01T12:12:47.470] [30344] [INFO] - GET / 500 9ms
最新发布
06-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值