CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 进阶/课时/Node 与数据库
RawBlame
课时目录12 节

Node.js 进阶

  1. 01Node 进阶概览
  2. 02EventEmitter
  3. 03错误类型与处理
  4. 04语义化版本
  5. 05创建与发布包
  6. 06命令行应用
  7. 07Inquirer 与 prompts
  8. 08chokidar 与热重载
  9. 09模板引擎
  10. 10Node 与数据库
  11. 11glob 与文件模式
  12. 12综合练习

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——此处只演示 驱动层,不做聚合管道深入。

选型对照

PostgreSQLMongoDB
模型关系表、JOIN嵌套文档
Node 驱动pgmongodb
专精 trackpostgresql-essentialsmongodb-essentials
框架接入Nest TypeORM/PrismaNest 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 与文件批处理。

    加载本节练习…
    ← 上一课模板引擎下一课 →glob 与文件模式