本地运行部署课程项目
用这个页面在你的电脑上运行提取的 Dream Catcher 项目。你拥有的版本使用内置的 SQLite 数据库或单独的 PostgreSQL 数据库。先识别你的版本,然后按照对应的本地设置说明进行。
你需要先准备什么
安装一个支持的 LTS 版本的 Node.js。推荐使用 Node 24,它包含 npm。为项目导入的提供商准备好一个密钥和模型名称。
PostgreSQL 版本还需要一个可访问的 PostgreSQL 数据库及其连接字符串,即 postgresql:// URL,其中包含用户名、密码、主机和数据库名。如果你本地没有运行 PostgreSQL,使用托管的 PostgreSQL 数据库也可以。SQLite 版本包含了数据库文件,不需要单独的数据库服务。
如果你的版本使用 PostgreSQL,要先创建那个数据库,并保存好它的连接字符串。应用启动时必须要用到它。
识别你提取的版本
如果提取的项目包含 dreams.db,使用 SQLite 说明。它不需要单独的数据库服务。如果它的服务器需要 DATABASE_URL,使用 PostgreSQL 说明并准备一个可访问的 PostgreSQL 数据库。
package.json 中的依赖可以确认这一点:PostgreSQL 版本中出现 pg,早期版本中出现原生 SQLite 驱动 sqlite3。config/database.js 中的导入显示服务器实际使用的是哪个数据库模块。
在包含 package.json 的文件夹中打开终端:
$ cd path-to-your-downloaded-project打包的 README 已过时
下载中的 README 即使在代码已迁移到 OpenAI 或 Gemini 以及 PostgreSQL 后,仍然描述的是 Claude 和 SQLite 应用。使用下载的 package.json、导入和服务器文件作为权威。
dreams.db,或者服务器是否需要 DATABASE_URL。这会告诉你是应该按照 SQLite 还是 PostgreSQL 的说明来做,所以在配置任何东西之前先检查这个。 加载本地 .env 文件
下载的服务器读取 process.env,但它的启动命令不会加载本地 .env 文件。打开 package.json 并改变:
"start": "node server.js"为:
"start": "node --env-file=.env server.js"这使用 Node 的内置环境文件支持,不需要添加另一个依赖。如果 --env-file 指定的文件缺失,Node 会报错停止,而且你的 shell 中已设置的变量优先于文件中的值。AI 工程入门项目的后端也需要相同的 --env-file 改动。
确保 .gitignore 包含这两行:
.env
node_modules/提交前检查下载文件中这两行的拼写。Git 手册在忽略文件和良好习惯中介绍了为什么这些条目很重要。
--env-file=.env,这样 Node 就会读取你的设置文件。 然后检查 .gitignore 是否列出了 .env 和 node_modules/,这样你的密钥和已安装的包就不会进入 Git。
运行 SQLite 版本
Push to GitHub 快照默认导入 OpenAI 实现。在 package.json 旁边创建 .env:
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=your-model-id
PORT=3001DATABASE_PATH 是可选的。不设置的话,服务器使用项目文件夹中的 dreams.db。如果你设置了自定义路径,确保其目录存在且可写。
安装锁定的依赖并启动服务器。npm ci 安装 lockfile 中的确切版本,原生 SQLite 包需要干净安装,因为它是为你的操作系统和 Node 版本编译的:
$ npm ci
$ npm start
> [email protected] start
> node --env-file=.env server.js
Server running on http://localhost:3001打开 http://localhost:3001/,或你在 .env 中设置的端口。按 Ctrl+C 停止服务器。
项目中还包含 Gemini 实现,但路由默认导入 OpenAI 文件。如果你按照课程的提供商切换代码进行,改用 GEMINI_API_KEY 和可选的 GEMINI_MODEL。
.env,运行 npm ci 和 npm start,然后在浏览器中打开 3001 端口。 数据库文件已经随项目提供了,没有什么其他需要设置的。
运行 PostgreSQL 版本
后期项目用 PostgreSQL 替换了 SQLite。先创建一个数据库,然后把它的连接字符串加到 .env 中,还有 AI 配置:
DATABASE_URL=postgresql://user:password@host:5432/database
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=your-model-id
PORT=3001然后运行:
$ npm ci
$ npm start最终项目在监听前初始化表,所以 Server running on http://localhost:3001 只在数据库应答时出现。如果数据库无法到达或拒绝其 TLS 设置,启动会停止并显示 Failed to initialize database: 后跟错误。错误文本指向原因:ENOTFOUND 表示主机名未解析,password authentication failed 表示凭证,SSL 或 TLS 消息表示加密设置。课程代码请求 SSL 连接,适合托管数据库;如果你的本地 PostgreSQL 没有 TLS,连接设置需要与之匹配。
/health 端点在启动后检查连接:
http://localhost:3001/health一个健康的服务器用包含 "status": "ok" 和 "db": "connected" 的 JSON 应答。如果数据库后来掉线,同一个 URL 返回 "db": "disconnected" 和数据库错误消息。
移除临时关闭路由
终止进程和信号课程中的 /shutdown 端点仅用于测试优雅终止。按照课程说明删除该路由,然后再共享或部署应用。留下一个终止服务器的公开 URL 是不安全的。
.env 中,启动应用,然后访问 /health 并查看 "db": "connected"。 在和任何人共享应用之前移除临时关闭路由。
故障排除
OPENAI_API_KEY environment variable is missing or empty: 确认启动脚本包含 --env-file=.env,.env 在 package.json 旁边,变量名与导入的提供商文件匹配。
页面打开但创建梦想返回 AI 错误: 检查提供商密钥和模型是否一起工作。不需要实时 AI 请求来验证页面和现有梦想 API 是否工作。
SQLite 报告原生模块错误: 用支持的 Node LTS 版本从干净的提取重新安装,使用 npm ci。不要从另一个操作系统复制 node_modules。
PostgreSQL 启动失败: 读 Failed to initialize database: 后的错误,然后检查完整的 DATABASE_URL、数据库网络访问、凭证和 TLS 要求。最终课程代码请求 SSL 连接。
切换版本后数据库为空: dreams.db 中的 SQLite 数据不会自动出现在 PostgreSQL 中。运行课程的迁移步骤或单独填充新数据库。
SQLite 数据不会自动进入 PostgreSQL,所以切换后的空梦想列表是预期的,直到你迁移或填充它。

