Express 是世界上使用最多的 Node.js 框架,它使开发人员能够使用 JavaScript 创建后端网络服务器。该框架提供了后端开发人员所需的大部分功能,简化了路由和响应 Web 请求的过程。
我们已经为你准备了一份关于 Express.js 的指南,所以这篇实践文章将向你展示如何使用它。本教程介绍如何使用 Express.js 创建和部署一个 Node.js 应用程序示例。
如何使用 Express.js 快速创建应用程序
本教程演示了如何创建一个网络应用程序,该程序可以接收对端点的请求,使用请求中的参数调用数据库,并以 JSON 格式从数据库返回信息。
前提条件
要学习本教程,请确保您的计算机上安装了以下工具:
- Node.js 和 Node 包管理器 (npm) – JavaScript 的基本运行环境和包管理器。
- Git – 促进软件协作开发的分布式版本控制系统。
Express 应用程序生成器
您可以使用我们的 Express.js 指南中概述的流程将 Express 添加到现有的 Node 应用程序中,但如果您要从头开始,还有一个更快捷的选择:Express 生成器。
来自 Express.js 的官方 Express 生成器是一个 Node 包,它允许你生成一个新的应用程序骨架。首先为您的应用程序创建一个文件夹,然后运行 npx
命令(Node.js 8.2.0 中提供)即可完成生成:
mkdir express-application npx express-generator
成功生成后,终端会显示创建的文件夹/文件列表,以及安装依赖项和运行应用程序的命令。运行以下命令安装依赖项:
npm install
接下来,启动网络服务器:
DEBUG=myapp:* npm start
骨架应用程序有一个预建的索引路由,可渲染一个基本主页。你可以访问 localhost:3000
在浏览器中查看。
探索骨架 Express 应用程序
在首选代码编辑器中打开 Express 应用程序后,你会发现一个基本结构构成了网络应用程序的骨架。
/ |-- /node_modules |-- /public |-- /routes |-- index.js |-- users.js |-- /views |-- error.jade |-- index.jade |-- layout.jade |-- app.js |-- package.json
- node_modules:此目录存储项目的所有已安装依赖项和库。
- public:包含 CSS、JavaScript、图片等静态资产。这些文件将直接提供给客户端浏览器。
- routes:包含负责定义各种路由和处理来自不同 URL 的请求的文件。
- views:包含服务器渲染以创建用户界面的模板或视图。这里的 error.jade、index.jade 和 layout.jade 是用 Jade 模板语言编写的模板。它们有助于结构化并向用户呈现动态内容。
- app.js:该文件通常作为 Express 应用程序的入口点。在这里配置服务器、设置中间件、定义路由以及处理请求和响应。
- package.json:该文件包含应用程序的元数据。它有助于管理依赖关系和项目配置。
了解路由处理
在 Express 应用程序中,routes 目录是将路由定义为独立文件的地方。主要路由通常称为索引路由,位于 routes/index.js 文件中。
该索引路由处理 GET
请求,并以框架生成的 HTML 网页作为响应。下面的代码片段说明了如何处理 GET
请求,以呈现一个基本的欢迎页面:
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router;
如果将 res.render()
函数修改为 res.send()
,响应类型就会从 HTML 变为 JSON:
var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { res.send({ key: 'value' }); }); module.exports = router;
为了扩展功能,在同一文件中添加了另一个路由,引入了一个接受参数的新端点。该代码片段演示了应用程序如何处理不同端点上的流量、提取参数并以 JSON 格式响应其值:
/* GET a new resource */ router.get('/newEndpoint', function(req, res, next) { res.send({ yourParam: req.query.someParam }); });
向 localhost:3000/newEndpoint?someParam=whatever
发送 GET
请求,将产生包含字符串 “whatever” 的 JSON 输出。
在 Postman 中向本地运行的应用程序发出 GET 请求。
注:必须重新启动网络服务器才能有效执行新的更改。
Express 和 Kinsta 应用程序托管
从你的电脑向你的电脑发出网络请求固然不错,但只有离开本地主机,网络开发才算完成。幸运的是,即使需要数据库,Kinsta 也能让应用程序轻松部署到网络上。
现在,让我们通过集成数据库功能,并将应用程序和数据库部署到网络上,实现从任何计算机访问,来深入探讨如何扩展应用程序的功能。
在将 Express 应用程序部署到 Kinsta 的应用程序托管服务之前,将应用程序的代码和文件推送到您选择的 Git 提供商(Bitbucket、GitHub 或 GitLab)至关重要。确保在应用程序根目录创建 .gitignore 文件并包含 node_modules
,以防止将这些文件推送到 Git 提供商。
设置好仓库后,请按照以下步骤将 Express 应用程序部署到 Kinsta:
- 登录或创建账户,查看 MyKinsta 面板。
- 通过 Git 提供商授权 Kinsta。
- 单击左侧边栏上的 Applications ,然后单击 Add application。
- 选择要部署的版本库和分支。
- 为应用程序指定一个唯一的名称,并选择 Data center location。
- 接下来配置构建环境。选择标 Standard build machine,并为该演示选择推荐的 Nixpacks 选项。
- 使用所有默认配置,然后单击 “Create application“。
Kinsta 可与 Express 应用程序生成器配合使用!完成这些步骤后,应用程序将自动开始构建和部署过程。
部署界面将提供 Kinsta 部署应用程序的 URL。您可以添加 /newEndpoint?someParam=whatever
来测试本文前一部分中构建的端点。
如何在 Express 应用程序中添加数据库
对于大多数生产级应用程序来说,拥有一个数据库是必不可少的。
下面介绍如何在 Kinsta 上创建数据库:
1. 导航到 MyKinsta 面板侧边栏上的 Databases 部分。
2. 单击 Create a database。输入名称并选择数据库类型,配置数据库详细信息。
3. 选择 PostgreSQL 选项。Database username 和 password 将自动生成:
添加新数据库的 MyKinsta 数据库配置步骤。
4. 选择与托管 Express 应用程序相同的 Data center location,并配置所需的大小。
5. 确认付款信息并单击 Create database。
成功创建数据库后:
- 点击访问数据库详细信息。在 “Overview” 页面中,导航至 “Internal connections” 部分。
- 选择适当的应用程序。
- 选中 Add environment variables to the application 选项。
- 单击 Add connection,连接新创建的数据库和应用程序。
接下来,复制新创建数据库的连接字符串,用数据库工具连接数据库。任何 SQL 连接工具都可以,但本演示使用的是 Beekeeper。打开应用程序,点击从 URL 导入,粘贴连接字符串,然后点击导入。这样就可以在刚刚创建的 Kinsta 托管数据库上执行 SQL。
接下来,使用数据库工具对托管数据库执行一些 SQL 语句,创建一个只有一个条目的基本表:
CREATE TABLE "States" ( id integer CONSTRAINT states_pk PRIMARY KEY, state_name varchar(100), capital varchar(100), state_bird varchar(100), "createdAt" TIMESTAMPTZ NOT NULL DEFAULT NOW(), "updatedAt" TIMESTAMPTZ NOT NULL DEFAULT NOW() ); INSERT INTO "States" VALUES(1, 'ohio', 'columbus', 'cardinal');
将以下数据库软件包添加到项目中:
npm install sequelize pg
sequelize
依赖项是 Node.js 的 ORM,而 pg
则作为 PostgreSQL 客户端,实现 Node.js 应用程序与 PostgreSQL 数据库之间的交互。
接下来,编写应用代码,接受带有 id
参数的 GET
请求,并返回与该 id
相关联的数据库信息。为此,请相应修改 index.js 文件:
var express = require('express'); var router = express.Router(); const { Sequelize, DataTypes } = require('sequelize'); const sequelize = new Sequelize(process.env.CONNECTION_URI, { dialect: 'postgres', protocol: 'postgres', }); const State = sequelize.define('State', { // Model attributes are defined here state_name: { type: DataTypes.STRING, allowNull: true, unique: false }, capital: { type: DataTypes.STRING, allowNull: true, unique: false }, state_bird: { type: DataTypes.STRING, allowNull: true, unique: false }, }, { // Other model options go here }); async function connectToDB() { try { sequelize.authenticate().then(async () => { // await State.sync({ alter: true }); }) console.log('Connection has been established successfully.'); } catch (error) { console.error('Unable to connect to the database:', error); } } connectToDB(); /* GET a new resource */ router.get('/state', async function(req, res, next) { const state = await State.findByPk(req.query.id); if (state) { res.send(state) } else { res.status(404).send("state not found"); } }); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); /* GET a new resource */ router.get('/newEndpoint', function(req, res, next) { res.send({ yourParam: req.query.someParam }); }); module.exports = router;
提交代码更改并将其推送到 Git 仓库。然后,在 Kinsta 上手动重新部署或等待自动部署。
现在,当你以 id=1
查询 /states
端点时,你将从数据库中收到一个状态。
向 MyKinsta 托管的全功能应用程序发出 GET 请求。
这就是全部内容!您可以在 GitHub 上查看完整的项目代码。
小结
本文演示了 Express 框架如何让创建和部署 Node.js 应用程序变得快速而简单。只需几个简单的步骤,您就可以使用 Express 生成器创建一个新的应用程序。
在 Node.js 应用程序开发中使用 Express 框架的强大功能和简便性是显而易见的。使用 Kinsta 或者大部分云服务器提供商,您可以将 Express 和 Node.js 带来的动力带入项目的部署阶段,而无需浪费时间进行配置。
评论留言