Next.js连接自定义PostgreSQL数据库的完整指南
创作时间:
作者:
@小白创作中心
Next.js连接自定义PostgreSQL数据库的完整指南
引用
CSDN
1.
https://blog.csdn.net/weixin_45314519/article/details/143135887
Next.js官方教程在第6章讲解数据库设置时,使用了Vercel的数据库和@vercel/postgres
库。然而,由于网络问题或数据库容量限制,你可能需要连接自己的PostgreSQL数据库。本文将详细介绍如何在Next.js项目中实现这一需求。
安装PostgreSQL
首先,我们需要在服务器上安装PostgreSQL。这里推荐使用Docker Compose进行部署,配置如下:
version: '3.9'
services:
db:
image: postgres
restart: always
shm_size: 128mb
environment:
POSTGRES_PASSWORD: Ywj@0715
POSTGRES_DB: nextjs
POSTGRES_USER: ywj
ports:
- "5432:5432"
volumes:
- ./data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: "ywj@yangood.top"
PGADMIN_DEFAULT_PASSWORD: "123456"
ports:
- "3005:80"
depends_on:
- db
安装完成后,别忘了修改pg_hba.conf
文件,允许外部访问。
安装pg库
回到Next.js项目目录,运行以下命令安装pg库:
pnpm i pg
编写SQL方法
由于不能直接使用Vercel的pg库,我们需要创建一个自定义的pg.ts
文件,模仿其功能。在.env
文件中添加以下环境变量:
POSTGRES_USER="ywj"
POSTGRES_PASSWORD="ywjpwd"
POSTGRES_HOST="xxx.xxx.xxx.xxx"
PGSQL_PORT="5432"
POSTGRES_DATABASE="nextjs"
然后编写pg.ts
文件:
import { QueryResult } from "@vercel/postgres";
import { Pool } from "pg";
const pool = new Pool({
user: process.env.POSTGRES_USER,
password: process.env.POSTGRES_PASSWORD,
host: process.env.POSTGRES_HOST,
port: Number.parseInt(process.env.PGSQL_PORT as string),
database: process.env.POSTGRES_DATABASE,
});
class MyPgClient {
pool: Pool;
constructor(pool: Pool) {
this.pool = pool;
}
async sql<T extends QueryResultRow>(
queryTemplate: TemplateStringsArray,
...values: (string | number | Date | null | undefined)[]
): Promise<QueryResult<T>> {
const sqlString = queryTemplate.reduce(
(acc, str, i) => acc + (i === 0 ? str : `$${i} ` + str),
''
);
try {
const res: QueryResult<T> = await pool.query({ text: sqlString, values });
return res as QueryResult<T>;
} catch (error) {
console.error('Error executing query:', error);
throw error;
}
}
}
const client = new MyPgClient(pool);
async function sql<T extends QueryResultRow>(
queryTemplate: TemplateStringsArray,
...values: (string | number | Date | null | undefined)[]
): Promise<QueryResult<T>> {
return client.sql(queryTemplate, ...values)
}
export { pool, sql, client };
最后调整
最后,我们需要在项目中替换原有的Vercel数据库引用:
在/app/seed/route.ts
中:
// import { db } from '@vercel/postgres';
import { client } from '@/app/scripts/pg';
在/app/lib/data.ts
中:
// import { sql } from '@vercel/postgres';
import { sql } from '@/app/scripts/pg';
完成以上步骤后,你就可以继续按照官方教程进行seed操作了。以下是seed成功后的效果截图:
通过本文的指导,你应该能够顺利地在Next.js项目中连接并使用自己的PostgreSQL数据库。
热门推荐
孕前检查是否需要空腹?还有哪些注意事项?
如何通过法律途径投诉物业不作为
肠道气体移动异常:症状、原因、治疗与预防全解析
告别尴尬!妙佑医疗国际推荐:改善肠道气体移动的小贴士
冬季吃羊肉,温暖身心抗抑郁
冬季养生,羊肉食疗正当时!
冬季养生新选择:羊肉炖萝卜的六种创新吃法
拿破仑的艺术遗产:帝政风格的崛起与影响
橄榄油、牛油果、三文鱼:补充不饱和脂肪酸的最佳选择
橄榄油:日常饮食中的护心神器
三文鱼和牛油果:健康脂肪的最佳拍档!
橄榄油、亚麻籽油:选购与使用全攻略
拿破仑时代的“帝政风格”建筑:一场跨越时空的艺术盛宴
小市值个股成股市新宠?背后有大文章!
哪吒艺术设计揭秘:国漫崛起的秘密武器!
长期服用甲状腺素片的副作用
女性手腕搭配指南:左手戴玉镯右手戴金镯是否适宜及常见搭配建议
左手戴翡翠手镯右手戴黄金手镯:是否合适、风水如何、好不好看?
多地呼吁让景于客,缓解旅游高峰压力
王明志亲述:上海国际航运中心的崛起之路
钢琴视奏技巧大揭秘:从零基础到高手
钢琴初学者视奏技巧训练指南
体检前的那些事儿,您知道多少?
肿瘤患者口腔护理指南:化疗和放疗期间的注意事项
Android:如何为不同的应用添加自定义通知声音
6 招玩转 Windows 11 通知管理,让你专注工作免受打扰
以故事打破古板課堂 翻轉教室,歷史從不沉悶!
《心动的信号》同款:打造浪漫情侣电动座椅厅
网友分享让人眼前一亮的旧物改造,太强了!
大运河:大一统国家的水路命脉