Node 与数据库
working-with-databases;pg/mongo 驱动。
30 分钟
Node 与数据库
应用层 ORM 见 nest-db;脚本与 CLI 常用 原生驱动:pg 连 PostgreSQL、mongodb 连 MongoDB。本课建立 连接、查询、参数化、关闭 直觉,深入 schema 请走专精 track。
学习目标
- 用
pg执行参数化 SQL - 用官方
mongodb驱动做 CRUD - 管理连接池与脚本退出时的
end()
PostgreSQL:pg
import pg from "pg";
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
const { rows } = await pool.query(
"SELECT id, slug FROM tracks WHERE slug = $1",
["nodejs-advanced-essentials"]
);
await pool.end();
永远 $1, $2 占位——与 pg-ddl 的 SQL 纪律一致。事务:
const client = await pool.connect();
try {
await client.query("BEGIN");
await client.query("INSERT INTO ...", [...]);
await client.query("COMMIT");
} catch (e) {
await client.query("ROLLBACK");
throw e;
} finally {
client.release();
}
MongoDB:mongodb 驱动
import { MongoClient } from "mongodb";
const client = new MongoClient(process.env.MONGODB_URI);
await client.connect();
const col = client.db("codermap").collection("imports");
await col.insertOne({ file: "tracks.json", at: new Date() });
await client.close();
文档模型见 mongo-documents——此处只演示 驱动层,不做聚合管道深入。
选型对照
| PostgreSQL | MongoDB | |
|---|---|---|
| 模型 | 关系表、JOIN | 嵌套文档 |
| Node 驱动 | pg | mongodb |
| 专精 track | postgresql-essentials | mongodb-essentials |
| 框架接入 | Nest TypeORM/Prisma | Nest Mongoose |
本站业务库以 MySQL 为主;PG/Mongo 课用于 扩展栈与脚本,不矛盾。
错误与测试
- 连接失败:捕获 system 错误,stderr 提示检查 ()