使用 ServBay 创建并运行 Koa.js 项目
ServBay 是一个专为 macOS 设计的本地 Web 开发环境,它集成了多种开发者常用的软件包,包括 Node.js 运行时和多种数据库。本文将指导您如何利用 ServBay 提供的便利环境,快速创建、运行和管理您的 Koa.js 项目。
什么是 Koa.js?
Koa.js 是一个由 Express.js 团队开发的、基于 Node.js 的下一代 Web 框架。它以其简洁、富有表现力和强大的特性集而闻名,是构建 Web 应用和 API 的理想选择。Koa.js 充分利用了现代 JavaScript 的特性,特别是 async/await
语法,极大地简化了异步操作和中间件的编写,使得代码更加清晰和易于维护。
Koa.js 的主要特性
- 基于 async/await: 核心设计围绕
async/await
,让异步流程控制更加直观。 - 轻量化核心: Koa 的核心库非常小巧,仅包含基础功能,通过模块化的中间件来扩展功能。
- 强大的中间件: 采用级联式(cascading)中间件机制,请求处理流程清晰灵活。
- 专注于 Web: 专注于 Web 应用和 API 开发,不提供额外的、非必要的功能。
通过使用 Koa.js,开发者可以更加高效地构建高性能和可维护的 Web 服务。
使用 ServBay 搭建 Koa.js 开发环境
ServBay 为 Node.js 开发者提供了一个开箱即用的环境,集成了 Node.js 运行时和常用的数据库服务。结合 ServBay 的**网站(Website)**功能,您可以轻松地通过自定义域名和 SSL 证书访问您的本地 Koa.js 项目。
前提条件
在开始之前,请确保您已完成以下准备工作:
- 安装 ServBay: 访问 ServBay 官方网站 下载并安装最新版本的 ServBay。
- 安装 Node.js 软件包: 打开 ServBay 应用,进入**软件包(Packages)**管理界面,确保您已安装所需的 Node.js 版本。如果未安装,请选中并点击安装。
- 熟悉 ServBay 基本操作: 了解如何在 ServBay 中启动/停止服务以及管理网站(Website)。
创建 Koa.js 项目
我们将使用 ServBay 推荐的网站根目录 /Applications/ServBay/www
来存放项目文件。
初始化项目目录
打开终端(Terminal)应用程序,切换到 ServBay 的网站根目录,并创建一个新的项目文件夹(例如
servbay-koa-app
)。然后,进入该文件夹并初始化一个新的 Node.js 项目:bashcd /Applications/ServBay/www mkdir servbay-koa-app cd servbay-koa-app npm init -y
1
2
3
4npm init -y
命令将快速生成一个默认的package.json
文件。安装 Koa.js
在项目根目录
servbay-koa-app
中,使用 npm 安装 Koa.js 及其类型定义(如果使用 TypeScript):bashnpm install koa # 如果使用 TypeScript,可以安装类型定义 # npm install @types/koa --save-dev
1
2
3创建应用入口文件
在项目根目录
servbay-koa-app
下创建一个名为app.js
的文件,并添加一个简单的 Koa.js 应用代码:javascriptconst Koa = require('koa'); const app = new Koa(); // 中间件:记录请求信息 app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); // 中间件:处理根路径请求 app.use(async ctx => { ctx.body = 'Hello from ServBay Koa.js App!'; }); // 定义端口,优先使用环境变量 PORT const port = process.env.PORT || 3000; // 启动 HTTP 服务器 app.listen(port, () => { console.log(`Koa.js server running on http://localhost:${port}`); console.log(`Project path: ${__dirname}`); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24这段代码创建了一个基本的 Koa 应用,包含两个中间件:一个用于记录请求时间和路径,另一个用于响应根路径
/
的请求,返回 "Hello from ServBay Koa.js App!"。应用将在环境变量PORT
指定的端口或默认端口3000
上监听请求。
进入开发模式
在开发过程中,我们通常会启动一个本地 Node.js 进程来运行 Koa.js 应用,并通过 ServBay 的**网站(Website)**功能进行访问。
运行 Koa.js 开发服务器
打开终端,进入项目目录
servbay-koa-app
,然后使用node
命令运行app.js
文件。为了避免端口冲突或方便 ServBay 配置,我们可以指定一个特定的端口,例如8585
:bashcd /Applications/ServBay/www/servbay-koa-app PORT=8585 node app.js
1
2终端会输出类似
Koa.js server running on http://localhost:8585
的信息,表明服务器已成功启动并监听端口8585
。保持此终端窗口打开,以便服务器持续运行。配置 ServBay 网站(Website)反向代理
为了通过自定义域名访问运行在
localhost:8585
的 Koa.js 应用,我们需要在 ServBay 中配置一个**网站(Website)**使用反向代理。- 打开 ServBay 应用。
- 进入**网站(Website)**界面。
- 点击左下角的
+
按钮添加一个新的网站。 - 填写网站配置:
- 名称 (Name):
ServBay Koa.js Dev Site
- 域名 (Domain):
servbay-koa-dev.servbay.demo
(建议使用.servbay.demo
结尾的域名,ServBay 会自动为其生成 SSL 证书) - 类型 (Type): 选择
反向代理 (Reverse Proxy)
- IP 地址 (IP Address):
127.0.0.1
(指向本地运行的 Node.js 进程) - 端口 (Port):
8585
(指向 Koa.js 应用监听的端口) - 根目录 (Document Root): 此项对于反向代理类型不重要,可以留空或填写项目路径
/Applications/ServBay/www/servbay-koa-app
。
- 名称 (Name):
- 点击保存。
- ServBay 可能会提示您需要应用更改,请点击应用。
配置完成后,ServBay 会自动更新您的本地 hosts 文件,将
servbay-koa-dev.servbay.demo
指向127.0.0.1
,并通过内置的 Caddy 或 Nginx 服务器将来自该域名的请求反向代理到localhost:8585
端口。同时,由于使用了.servbay.demo
域名,ServBay User CA 会自动为此域名签发并信任 SSL 证书,您可以通过 HTTPS 安全访问。如果您需要更详细的步骤,可以参考 ServBay 文档中关于添加 Node.js 开发网站的部分(请注意选择英文文档)。
访问 Koa.js 开发网站
打开您的浏览器,访问
https://servbay-koa-dev.servbay.demo
。如果一切配置正确,您应该能看到页面显示 "Hello from ServBay Koa.js App!"。这意味着您已成功通过 ServBay 的网站功能访问到了本地运行的 Koa.js 开发服务器。在您修改
app.js
文件并重启 Node.js 进程后,刷新浏览器即可看到更改。
部署生产版本(模拟)
在模拟生产环境时,您可能需要使用不同的端口、环境变量或启动方式。ServBay 的反向代理配置同样适用于这种情况。
运行 Koa.js 生产服务器(模拟)
在另一个终端窗口中,停止之前运行的开发服务器(如果还在运行),然后以模拟生产模式启动应用,例如指定一个不同的端口
8586
和设置NODE_ENV
环境变量:bashcd /Applications/ServBay/www/servbay-koa-app PORT=8586 NODE_ENV=production node app.js
1
2这将启动一个监听端口
8586
的 Koa.js 实例,模拟生产环境的运行状态。配置 ServBay 网站(Website)反向代理(生产模拟)
类似地,在 ServBay 中为模拟生产环境配置一个新的网站:
- 打开 ServBay 应用,进入**网站(Website)**界面。
- 点击左下角的
+
按钮添加一个新的网站。 - 填写网站配置:
- 名称 (Name):
ServBay Koa.js Prod Site
- 域名 (Domain):
servbay-koa-prod.servbay.demo
(或者如果您有自己的域名,可以使用该域名并通过 ServBay 的 ACME/Let's Encrypt 功能申请免费 SSL 证书) - 类型 (Type): 选择
反向代理 (Reverse Proxy)
- IP 地址 (IP Address):
127.0.0.1
- 端口 (Port):
8586
(指向模拟生产环境 Koa.js 应用监听的端口) - 根目录 (Document Root): 留空或填写项目路径。
- 名称 (Name):
- 点击保存并应用更改。
使用
.servbay.demo
域名会继续使用 ServBay User CA 证书。如果您使用自己的公共域名,ServBay 支持通过 ACME 协议(如 Let's Encrypt)申请和管理免费的 SSL/TLS 证书,进一步模拟真实的生产环境。详情请参考 ServBay 文档关于使用 SSL 保护网站的部分。访问 Koa.js 生产网站(模拟)
打开浏览器,访问
https://servbay-koa-prod.servbay.demo
。您应该能看到与开发环境相同的页面输出,但这次请求是通过 ServBay 反向代理到运行在端口
8586
的 Node.js 进程处理的。
数据库连接
ServBay 集成了多种常用的数据库系统,包括 MongoDB、Redis、MariaDB (兼容 MySQL) 和 PostgreSQL。在您的 Koa.js 项目中连接这些数据库非常方便,因为它们都在本地运行,默认配置下可以通过 localhost
访问。
以下是使用 Node.js 驱动连接 ServBay 提供的一些数据库的示例代码片段。请确保您已在 ServBay 的**软件包(Packages)**中安装了相应的数据库,并且它们正在运行。
连接 MongoDB
首先,在您的 Koa.js 项目目录中安装 MongoDB 的 Node.js 驱动程序(例如
mongoose
或mongodb
):bashcd /Applications/ServBay/www/servbay-koa-app npm install mongoose # 或者 npm install mongodb
1
2然后,在您的
app.js
或其他模块中添加连接代码:javascript// 使用 Mongoose 连接 MongoDB const mongoose = require('mongoose'); // ServBay 默认 MongoDB 无需认证,数据库名可以自定义 mongoose.connect('mongodb://localhost:27017/servbay-koa-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err)); // 注意:在实际应用中,连接代码通常放在应用的启动逻辑中 // 并在连接成功后才开始监听端口。
1
2
3
4
5
6
7
8
9
10
11
12
13ServBay 默认安装的 MongoDB 通常监听
27017
端口,且默认情况下无需用户名和密码即可连接。您可以直接指定数据库名称(如果不存在会自动创建)。连接 Redis
安装 Redis 的 Node.js 客户端库:
bashcd /Applications/ServBay/www/servbay-koa-app npm install redis
1
2连接 Redis 服务器:
javascript// 使用 redis 客户端连接 Redis const redis = require('redis'); // 创建 Redis 客户端,默认连接 localhost:6379 const client = redis.createClient({ url: 'redis://localhost:6379' // ServBay 默认 Redis 端口为 6379 }); client.on('connect', () => { console.log('Connected to Redis'); }); client.on('error', (err) => { console.error('Redis connection error:', err); }); // 连接 Redis 服务器 client.connect(); // 注意:在实际应用中,您可能需要等待连接成功后再执行 Redis 操作 // 例如使用 async/await 结合 client.connect()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21ServBay 默认安装的 Redis 监听
6379
端口,默认配置下无需密码。连接 MariaDB (或 MySQL)
MariaDB 是 MySQL 的一个分支,API 高度兼容。ServBay 提供了 MariaDB 软件包,您可以将其视为 MySQL 使用。
安装 MariaDB 的 Node.js 驱动:
bashcd /Applications/ServBay/www/servbay-koa-app npm install mariadb # 或者 npm install mysql2 (兼容性更好,推荐)
1
2使用
mariadb
驱动连接:javascript// 使用 mariadb 客户端连接 MariaDB const mariadb = require('mariadb'); // ServBay 默认 MariaDB root 用户密码为 'password' const pool = mariadb.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_koa_app', // 请确保数据库已创建,或根据需要调整 connectionLimit: 5 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); conn.release(); // 将连接释放回连接池 }) .catch(err => { console.error("MariaDB connection error:", err); }); // 注意:在实际应用中,从连接池获取连接是异步操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22使用
mysql2
驱动连接(推荐):javascript// 使用 mysql2 客户端连接 MariaDB/MySQL const mysql = require('mysql2/promise'); // 使用 promise 版本 // ServBay 默认 MariaDB root 用户密码为 'password' const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_koa_app', // 请确保数据库已创建 waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB/MySQL using mysql2"); conn.release(); // 将连接释放回连接池 }) .catch(err => { console.error("MariaDB/MySQL connection error:", err); }); // 注意:ServBay 默认的 root 用户密码可以在 ServBay GUI 的数据库设置中查看和修改。 // 建议在实际项目中避免硬编码密码,而是使用环境变量等方式管理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25ServBay 默认安装的 MariaDB 监听
3306
端口。默认的root
用户密码可以在 ServBay 的数据库管理界面中找到。您可能需要在 ServBay 或使用数据库客户端(如 TablePlus, DBeaver 等)手动创建servbay_koa_app
数据库。连接 PostgreSQL
安装 PostgreSQL 的 Node.js 驱动:
bashcd /Applications/ServBay/www/servbay-koa-app npm install pg
1
2连接 PostgreSQL 服务器:
javascript// 使用 pg 客户端连接 PostgreSQL const { Pool } = require('pg'); // ServBay 默认 PostgreSQL 用户 'user' 密码为 'password' const pool = new Pool({ user: 'user', // ServBay 默认用户 host: 'localhost', database: 'servbay_koa_app', // 请确保数据库已创建 password: 'password', // ServBay 默认密码 port: 5432, // ServBay 默认 PostgreSQL 端口 }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL'); client.release(); // 将连接释放回连接池 }); // 注意:ServBay 默认的 'user' 用户密码可以在 ServBay GUI 的数据库设置中查看和修改。 // 建议在实际项目中避免硬编码密码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23ServBay 默认安装的 PostgreSQL 监听
5432
端口。默认用户名和密码可以在 ServBay 的数据库管理界面中找到。您同样可能需要手动创建servbay_koa_app
数据库。
管理 ServBay 中的数据库
除了通过代码连接,您还可以使用图形界面工具连接 ServBay 提供的数据库进行管理。ServBay 默认配置的数据库监听在 127.0.0.1
或 localhost
上,使用 ServBay GUI 中显示的端口和默认用户名/密码即可连接。
- 查看/修改默认密码: 在 ServBay 应用中,找到对应的数据库软件包,点击设置图标,可以查看和修改默认的
root
(MariaDB) 或user
(PostgreSQL) 用户密码。 - 创建数据库/用户: 使用如 TablePlus, DBeaver, pgAdmin, MongoDB Compass 等客户端工具,连接到 ServBay 提供的数据库服务,然后通过 SQL 命令或图形界面创建新的数据库、用户和表等。
注意事项
- 端口冲突: 确保您为 Koa.js 应用选择的端口(例如 8585, 8586)没有被系统中其他程序占用。
- ServBay 状态: 确保 ServBay 应用本身以及所需的 Node.js 软件包和数据库服务正在运行。
- hosts 文件: ServBay 会自动管理
hosts
文件,但如果遇到域名解析问题,可以检查/etc/hosts
文件中是否存在对应的记录。 - 防火墙: 确保 macOS 防火墙或任何第三方防火墙没有阻止 ServBay 或 Node.js 进程的网络连接。
- 日志查看: 如果遇到问题,查看 ServBay 的日志(通常位于 ServBay 应用界面的日志选项卡)以及 Node.js 进程在终端中的输出,有助于诊断问题。
常见问题解答 (FAQ)
问:为什么需要使用 ServBay 的反向代理来访问我的 Koa.js 项目?
答: 使用反向代理(通过 ServBay 的网站功能)有几个好处:
- 模拟生产环境: 使用自定义域名(如
.servbay.demo
或您自己的域名)而不是localhost:PORT
更接近真实网站的访问方式。 - SSL 支持: ServBay 可以为您的本地网站自动配置 SSL 证书(使用 ServBay User CA 或 Let's Encrypt),让您在开发阶段就能测试 HTTPS。
- 统一管理: 在 ServBay 中集中管理您的所有本地开发网站,方便快捷。
- 端口隐藏: 外部访问者(如果您允许的话)或浏览器访问的是标准的 80/443 端口,内部请求才转发到 Node.js 进程监听的高端口。
- 模拟生产环境: 使用自定义域名(如
问:我可以不使用反向代理,直接通过
localhost:PORT
访问吗?答: 可以。如果您的 Koa.js 应用直接监听在一个端口(例如 3000 或您指定的其他端口),您理论上可以直接在浏览器中访问
http://localhost:PORT
来进行开发和测试。然而,这样您将无法利用 ServBay 提供的自定义域名、自动 SSL、日志管理等网站层面的便利功能。对于更接近真实部署环境的开发,使用 ServBay 的反向代理是更好的选择。问:ServBay 默认的数据库密码是什么?如何修改?
答: ServBay 默认的数据库密码可以在 ServBay 应用的数据库界面中找到。点击对应的数据库(如 MariaDB 或 PostgreSQL)旁边的设置图标,通常可以在配置或信息窗口中看到默认的用户和密码。您也可以在该界面修改密码。出于安全考虑,建议您修改默认密码。
总结
通过本文的指导,您应该已经掌握了如何利用 ServBay 在 macOS 上搭建 Koa.js 开发环境。我们创建了一个基本的 Koa.js 应用,并通过 ServBay 的网站功能配置了反向代理,实现了通过自定义域名和 HTTPS 访问本地运行的 Koa.js 开发和模拟生产实例。同时,我们也了解了如何连接 ServBay 提供的多种常用数据库。
ServBay 为 Node.js 开发者提供了一个集成的、易于管理的本地开发环境,让您可以更专注于代码编写,而不是繁琐的环境配置。利用 ServBay 的强大功能,可以显著提升您的开发效率。