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数据库。
热门推荐
如何制作字幕:从基础入门到进阶提升的实用指南?
情感的深度解析:理解情感的本质与力量
抓大鹅爆火背后:小游戏成功的秘密武器
【关注】了解青少年髌骨脱位:预防、治疗与希望
东北野战军后代纪念辽沈战役胜利70周年活动纪实
景观常用木材干货知识:防腐木、炭化木与塑木的应用与案例
调研数据显示PS5 Pro美国初期销售速度不如PS4 Pro!
简述历史上三位江西老表的传奇,从中窥探江西老表的品性
《黑神话:悟空》的AI技术解析:游戏智能的新境界
吃蟹黄过敏怎么办?一文详解应对措施
蟹黄过敏的症状及注意事项
大神用科技实现“万剑归宗”名场面 网友:太酷啦!
内斜视手术后还会斜视吗?关键在于术后管理
紫玉兰花语之美——寓意与象征
深度强化学习落地的四大挑战与前沿对策
涪陵法院:依法调解彩礼纠纷 司法引领婚俗新风
LoRa MESH网络拓扑及其物联网应用场景简介
营收146亿净利下滑16.61%:重庆啤酒高端化遇阻与3.5亿赔偿案的双重挑战
一个人越活越幸福的 5 个方法
想用OLED显示器又怕烧屏?这些做法可以帮你!
买红宝石前必知的两件事:品质与价格密码
深度解读《寂静岭2:重置版》:经典心理恐怖的深度回溯与人性剖析
中国各地茶叶特色与文化背景
蜂蜜过敏症状怎么处理,喝蜂蜜水过敏了怎么办
产后护理的重要性
南瓜饼的制作方法、文化背景及创新探索
市场细分 – 方法和有效细分目标客户的例子
股票交易策略:从基本面分析到风险管理的全面指南
四川十大名菜,你吃过哪些?
纹样中的祥瑞中国年