使用 ServBay 创建并运行 Express.js 项目
什么是 Express.js?
Express.js 是一个基于 Node.js 的快速、开放、极简的 Web 应用框架。它提供了一系列强大的功能,用于构建单页、多页和混合型 Web 应用。Express.js 是 Node.js 生态系统中最受欢迎的框架之一,因其简洁和灵活的设计而深受开发者喜爱。
Express.js 的主要特性和优势
- 简洁和灵活:Express.js 提供了简洁的 API 和灵活的中间件机制,使得开发 Web 应用变得非常高效。
- 中间件:支持多种中间件,可以轻松处理请求和响应,例如用于解析请求体、处理会话、提供静态文件等。
- 路由:强大的路由功能,可以根据不同的 HTTP 方法(GET, POST, PUT, DELETE 等)和 URL 路径来处理请求。
- 集成性强:可以与各种模板引擎(如 Pug, EJS, Handlebars)、数据库(如 MongoDB, MySQL, PostgreSQL)和其他 Node.js 模块无缝集成。
- 社区和生态系统:拥有庞大的社区和丰富的第三方中间件和插件支持,遇到问题时容易找到解决方案和资源。
使用 Express.js,可以帮助开发者快速构建高性能的 Web 应用和 API。ServBay 作为一款强大的本地 Web 开发环境,为运行 Express.js 项目提供了便捷的 Node.js 环境和强大的网站(反向代理)及数据库管理功能。
使用 ServBay 创建并运行 Express.js 项目
本文将指导您如何利用 ServBay 提供的 Node.js 环境来创建、配置并运行一个 Express.js 项目。我们将使用 ServBay 的网站功能来设置 Web 服务器,并通过反向代理的方式来实现项目的访问。这种方式特别适用于 Node.js、Python、Go、Java 等需要在特定端口运行服务的应用。
前提条件
在开始之前,请确保您满足以下条件:
- 已在 macOS 上成功安装 ServBay。
- 已在 ServBay 中安装并启用了 Node.js 软件包。您可以通过 ServBay 控制面板的“软件包”选项卡进行管理。
- (可选)如果您计划连接数据库,请确保已在 ServBay 中安装并启用了相应的数据库软件包(如 MariaDB, PostgreSQL, MongoDB, Redis, MySQL)。
- 具备基本的终端或命令行操作知识。
创建 Express.js 项目
初始化项目
首先,打开终端,导航到 ServBay 建议的网站根目录
/Applications/ServBay/www
。然后,使用npx express-generator
命令来快速生成一个 Express.js 项目骨架。npx
是 npm v5.2+ 附带的工具,用于执行 Node.js 包的可执行文件。bashcd /Applications/ServBay/www npx express-generator servbay-express-app
1
2这会在
/Applications/ServBay/www
目录下创建一个名为servbay-express-app
的新文件夹,包含一个基本的 Express.js 项目结构。安装项目依赖
进入新创建的项目目录
servbay-express-app
,并使用npm install
命令安装项目所需的依赖包,包括 Express.js 框架本身以及模板引擎、静态文件服务等默认配置所需的包。bashcd servbay-express-app npm install
1
2等待依赖安装完成。
修改 Express.js 项目输出内容
为了验证项目是否成功运行,我们将修改默认的主页输出。
修改
routes/index.js
文件Express.js 项目通常使用路由文件来处理不同的 URL 请求。打开项目目录下的
routes/index.js
文件。这个文件处理根路径/
的 GET 请求。修改其中的代码,使其不再渲染默认的 Pug 模板,而是直接发送一个简单的文本响应。javascriptvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { // 修改为发送文本响应 res.send('Hello ServBay!'); }); module.exports = router;
1
2
3
4
5
6
7
8
9
10保存文件。
进入开发模式
在开发过程中,我们通常会运行一个本地开发服务器,方便实时查看修改效果。Express.js 项目可以通过 npm start
命令启动内置的 HTTP 服务器。
运行开发服务器
在项目根目录
servbay-express-app
中,执行以下命令来启动开发服务器。我们通过设置PORT
环境变量来指定服务器监听的端口,这里使用8585
。DEBUG
环境变量用于开启调试信息输出。bashcd /Applications/ServBay/www/servbay-express-app PORT=8585 DEBUG=servbay-express-app:* npm start
1
2终端会显示服务器启动信息,表明 Express.js 应用正在监听端口
8585
。配置 ServBay 网站反向代理
由于 Express.js 应用运行在自定义端口(8585),而不是标准的 Web 端口(80/443),我们需要使用 ServBay 的网站功能来配置一个反向代理。ServBay 的 Web 服务器(默认为 Caddy)将监听标准的 80/443 端口,并将针对特定域名的请求转发到运行在
127.0.0.1:8585
的 Express.js 应用。打开 ServBay 控制面板,切换到“网站”选项卡,点击添加新网站。配置如下:
- 名字:
My first Express.js dev site
(一个易于识别的名称) - 域名:
servbay-express-test.servbay.demo
(使用.servbay.demo
域名可以利用 ServBay 的 User CA 实现自动 HTTPS) - 网站类型:选择
反向代理
- IP:
127.0.0.1
(或localhost
) - 端口:
8585
(Express.js 应用监听的端口)
完成配置后,保存并应用 ServBay 的更改。ServBay 会自动配置 Web 服务器并生成 SSL 证书(对于
.servbay.demo
域名)。详细设置步骤请参考 ServBay 文档中关于添加 Node.js 开发网站的指南。
- 名字:
访问开发模式网站
打开浏览器,访问您配置的域名
https://servbay-express-test.servbay.demo
。ServBay 的 Web 服务器会接收到请求,并通过反向代理将其转发给运行在 8585 端口的 Express.js 应用。您应该能看到页面显示 "Hello ServBay!"。由于 ServBay 支持自定义域名以及免费的 SSL 证书(包括对
.servbay.demo
域名的自动 HTTPS 支持),您可以在本地开发环境中轻松使用 HTTPS,这与生产环境更接近,有助于发现潜在问题。
部署生产版本
当您的 Express.js 项目开发完成后,您可以准备将其部署到生产环境。在本地模拟生产环境运行有助于最终测试。
准备生产环境
通常,Express.js 项目在生产环境运行时会设置
NODE_ENV
环境变量为production
。这可能会影响某些库的行为,例如关闭调试模式、优化性能等。确保您的项目代码能正确响应NODE_ENV=production
的设置。运行生产服务器
在项目根目录
servbay-express-app
中,执行以下命令来启动模拟生产环境的服务器。我们使用一个不同的端口(例如8586
)来区分开发和生产实例,并将NODE_ENV
设置为production
。bashcd /Applications/ServBay/www/servbay-express-app PORT=8586 NODE_ENV=production npm start
1
2终端会显示服务器启动信息,监听端口
8586
。配置 ServBay 网站反向代理(生产)
与开发模式类似,为生产版本配置另一个 ServBay 网站反向代理。
打开 ServBay 控制面板,切换到“网站”选项卡,点击添加新网站。配置如下:
- 名字:
My first Express.js production site
- 域名:
servbay-express-test-prod.servbay.demo
(或您希望用于生产模拟的任何其他域名) - 网站类型:选择
反向代理
- IP:
127.0.0.1
- 端口:
8586
(生产实例监听的端口)
保存并应用 ServBay 的更改。
- 名字:
访问生产模式网站
打开浏览器,访问您为生产模拟配置的域名
https://servbay-express-test-prod.servbay.demo
。您将通过 ServBay 的反向代理访问到运行在 8586 端口的 Express.js 生产实例。这有助于您在本地测试生产配置下的应用行为。
数据库连接
ServBay 为本地开发提供了多种数据库软件包支持,包括 MariaDB、PostgreSQL、MongoDB 和 Redis。如果您在 ServBay 中启用了这些数据库,您的 Express.js 项目可以轻松连接它们。ServBay 通常会设置默认的用户和密码,例如 MariaDB/MySQL 的 root 用户默认密码是 password
,PostgreSQL 的默认用户是 user
,密码是 password
,默认数据库是 servbay_default
。您可以根据 ServBay 数据库界面的提示或默认配置进行连接。
以下是如何在 Express.js 项目中连接这些数据库的示例。请确保您已通过 npm install <package-name>
安装了相应的 Node.js 数据库驱动包。
连接 MongoDB
首先,在项目目录中安装 MongoDB 驱动
mongoose
(一个流行的 ORM 库):bashnpm install mongoose
1然后在您的 Express.js 项目代码中(例如,在
app.js
或一个单独的数据库配置文件中)引入并连接:javascriptvar mongoose = require('mongoose'); // 连接到本地运行的 MongoDB 实例,数据库名为 servbay-express-app // ServBay 默认的 MongoDB 无需认证即可连接 mongoose.connect('mongodb://localhost/servbay-express-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请确保 ServBay 中的 MongoDB 软件包已启动。
连接 Redis
首先,安装 Redis 客户端库
redis
:bashnpm install redis
1然后在项目中引入并连接:
javascriptvar redis = require('redis'); // ServBay 默认 Redis 运行在 localhost:6379,无密码 var client = redis.createClient({ host: 'localhost', port: 6379 }); client.on('connect', function() { console.log('Connected to Redis'); }); client.on('error', function (err) { console.log('Redis Error: ' + err); }); // 示例:设置和获取键值 // client.set('mykey', 'Hello from Express!', redis.print); // client.get('mykey', function(err, reply) { // if (err) throw err; // console.log(reply); // Prints "Hello from Express!" // }); // 在需要时使用 client 对象进行 Redis 操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23请确保 ServBay 中的 Redis 软件包已启动。
连接 MariaDB / MySQL
ServBay 支持 MariaDB 和 MySQL。连接方式类似,通常使用
mariadb
或mysql2
等 npm 包。这里以mariadb
包为例,它也可以连接 MySQL。首先,安装
mariadb
或mysql2
:bashnpm install mariadb # 或 npm install mysql2
1然后使用 ServBay 提供的默认凭据进行连接。ServBay 中 MariaDB/MySQL 的 root 用户默认密码是
password
。javascriptvar mariadb = require('mariadb'); // ServBay 默认 MariaDB/MySQL 运行在 localhost:3306 var pool = mariadb.createPool({ host: 'localhost', port: 3306, // 默认端口 user: 'root', // ServBay 默认用户 password: 'password', // ServBay 默认密码 database: 'servbay_express_app', // 您可以在 ServBay 中创建此数据库 connectionLimit: 5 // 连接池大小 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB/MySQL"); // conn 对象用于执行查询 // conn.query("SELECT 1").then(...).catch(...).finally(() => conn.release()); conn.release(); // 连接使用完毕后释放回连接池 }) .catch(err => { console.log("Not connected due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21在连接之前,您可能需要在 ServBay 的数据库管理工具(如 phpMyAdmin, Adminer 等,通过 ServBay 访问)中创建
servbay_express_app
数据库。请确保 ServBay 中的 MariaDB 或 MySQL 软件包已启动。连接 PostgreSQL
首先,安装 PostgreSQL 客户端库
pg
:bashnpm install pg
1然后使用 ServBay 提供的默认凭据进行连接。ServBay 中 PostgreSQL 的默认用户是
user
,密码是password
,默认数据库是servbay_default
。javascriptvar { Pool } = require('pg'); // ServBay 默认 PostgreSQL 运行在 localhost:5432 var pool = new Pool({ user: 'user', // ServBay 默认用户 host: 'localhost', database: 'servbay_default', // ServBay 默认数据库,或您创建的其他数据库 password: 'password', // ServBay 默认密码 port: 5432, // 默认端口 }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL'); // client 对象用于执行查询 // client.query('SELECT NOW()', (err, res) => { ... done(); }); done(); // 释放客户端连接 }); // 或者使用 async/await // try { // const client = await pool.connect(); // console.log('Connected to PostgreSQL'); // // const res = await client.query('SELECT NOW()'); // // console.log(res.rows[0]); // client.release(); // 释放客户端连接 // } catch (err) { // console.error('PostgreSQL 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
23
24
25
26
27
28
29
30
31请确保 ServBay 中的 PostgreSQL 软件包已启动。
总结
通过以上步骤,您已经成功地使用 ServBay 创建、配置并运行了一个 Express.js 项目。您学会了如何:
- 使用
express-generator
初始化项目。 - 运行 Express.js 应用在特定端口。
- 利用 ServBay 的网站功能配置反向代理,通过标准 HTTP/S 端口访问您的 Node.js 应用。
- 在 ServBay 提供的环境中连接多种常见的数据库。
ServBay 极大地简化了本地 Node.js (Express.js) 开发环境的搭建和管理,让您可以更专注于代码本身。同时,ServBay 提供的其他功能,如自动 SSL 证书、网站备份、日志查看等,也能为您的本地开发工作流程带来便利。