大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
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 提示检查
DATABASE_URL(nva-errors) - 测试:mock
Pool.query或 Testcontainers(test-integration 思路);node-test 可测纯函数层
练习
- 读 env 连接 PG,打印
SELECT version() - Mongo insert 一条
{ job: "import", status: "ok" }再 find - 脚本末尾确保
pool.end()/client.close(),避免 hang
小结
pg 参数化、mongo 文档 CRUD、用完关连接。 下一课 glob 与文件批处理。