Next.js13+Sequelize操作MySQL时出现pg-hstore模块找不到错误
解决Next.js13 App Router里Sequelize调用MySQL模型却报pg-hstore缺失的问题
先排查Sequelize配置
核心问题大概率是配置没明确指定用MySQL,导致Sequelize默认想去加载PostgreSQL的依赖。打开你的数据库配置文件,确保dialect字段写死成mysql:
// 示例:db/config.js const sequelize = new Sequelize( process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASSWORD, { host: process.env.DB_HOST, dialect: 'mysql', // 必须明确写这个,别漏! dialectOptions: { charset: 'utf8mb4', }, } );
别在客户端组件里直接碰模型
Next.js13的App目录组件默认是服务器组件,如果你在page.js里加了'use client'标签,组件会跑在客户端,而数据库模型根本不该在客户端加载。如果需要前端交互,就把数据请求逻辑放到API路由(不管是pages/api还是app/api)里,客户端通过fetch调用接口,别直接导入模型。
修复依赖与缓存
- 先把可能误装的PostgreSQL相关依赖删掉:
npm uninstall pg pg-hstore
- 确认MySQL所需的依赖都装了:
npm install sequelize mysql2
- 清掉Next.js的缓存再重启:
rm -rf .next npm run dev
正确的模型使用姿势
在App目录的page.js里(服务器组件,不带'use client'),直接导入模型并执行数据库操作就行:
// src/app/(admin)/admin/contact/page.js import Contact from '@/models/Contact'; export default async function ContactPage() { const contacts = await Contact.findAll(); return ( <div> {/* 渲染你的联系人列表 */} </div> ); }
内容的提问来源于stack exchange,提问作者Amir Hossein
相关产品推荐
相关产品推荐

