如何开始使用 Node.js 和 Express
介绍
Express是 Node.js 的 Web 应用程序框架,可让您以更轻松、更简洁的方式启动强大的 API 和 Web 服务器。它是一个轻量级软件包,不会遮挡核心 Node.js 功能。
在本文中,您将安装并使用 Express 来构建 Web 服务器。
先决条件
如果您想遵循本文,您将需要:
- Node.js 的本地开发环境。请按照如何安装 Node.js 并创建本地开发环境进行操作。
npm
本教程已通过 Node v15.14.0、 v7.10.0、express
v4.17.1 和v1.9.1验证serve-index
。
第 1 步 - 设置项目
首先,打开终端窗口并创建一个新的项目目录:
mkdir express-example
然后,导航到新创建的目录:
cd express-example
此时,你可以初始化一个新的 npm 项目:
npm init -y
接下来,您需要安装该express
包:
npm install express@4.17.1
此时,您已经有了一个可以使用 Express 的新项目。
第2步 - 创建Express服务器
现在 Express 已安装,请创建一个新server.js
文件并使用代码编辑器打开它。然后,添加以下代码行:
const express = require('express');
const app = express();
这里的第一行是从您安装的软件包中获取主 Express 模块。此模块是一个函数,然后我们在第二行运行它来创建app
变量。您可以通过这种方式创建多个应用程序,每个应用程序都有自己的请求和响应。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Successful response.');
});
这些代码行是我们告诉 Express 服务器如何处理GET
对我们服务器的请求的地方。 Express 包含类似的函数,用于POST
、PUT
等。使用app.post(...)
、app.put(...)
等。
这些函数采用两个主要参数。第一个是此函数要执行的 URL。在本例中,我们的目标是'/'
,它是我们网站的根目录:在本例中为localhost:3000
。
第二个参数是一个带有两个参数的函数:req
,和res
。req
表示发送到服务器的请求;我们可以使用此对象来读取有关客户端请求执行的操作的数据。res
表示我们将发送回客户端的响应。
在这里,我们调用 res 上的函数来返回响应:'Successful response.'
。
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Successful response.');
});
app.listen(3000, () => console.log('Example app is listening on port 3000.'));
最后,设置好请求后,我们必须启动服务器!我们将传入3000
函数listen
,该函数告诉应用程序要监听哪个端口。作为第二个参数传入的函数是可选的,并在服务器启动时运行。这在控制台中为我们提供了一些反馈,让我们知道我们的应用程序正在运行。
重新访问您的终端窗口并运行您的应用程序:
node server.js
然后,在 Web 浏览器中访问localhost:3000
。浏览器窗口将显示:'Successful response'
。终端窗口将显示:'Example app is listening on port 3000.'
。
好了,我们有一个 Web 服务器!但是,我们肯定想向客户端发送不止一行文本。让我们简单介绍一下中间件是什么以及如何将此服务器设置为静态文件服务器!
第 3 步 - 使用中间件
使用 Express,我们可以编写和使用中间件函数,这些函数可以访问到达服务器的所有 HTTP 请求。这些函数可以:
- 执行任意代码。
- 对请求和响应对象进行更改。
- 结束请求-响应周期。
- 调用堆栈中的下一个中间件函数。
我们可以编写自己的中间件函数或使用第三方中间件,就像使用其他包一样。
让我们首先编写自己的中间件,然后尝试使用一些现有的中间件来提供静态文件。
要定义中间件函数,我们调用app.use()
并传递一个函数。这是一个基本的中间件函数,用于在每个请求期间在控制台中打印当前时间:
const express = require('express');
const app = express();
app.use((req, res, next) => {
console.log('Time: ', Date.now());
next();
});
app.get('/', (req, res) => {
res.send('Successful response.');
});
app.listen(3000, () => console.log('Example app is listening on port 3000.'));
如果有中间件函数,该next()
调用会告诉中间件转到下一个中间件函数。这在函数末尾很重要 - 否则,请求将卡在此中间件上。
我们可以选择将路径传递给中间件,中间件将仅处理对该路由的请求。例如:
const express = require('express');
const app = express();
app.use((req, res, next) => {
console.log('Time: ', Date.now());
next();
});
app.use('/request-type', (req, res, next) => {
console.log('Request type: ', req.method);
next();
});
app.get('/', (req, res) => {
res.send('Successful response.');
});
app.listen(3000, () => console.log('Example app is listening on port 3000.'));
通过将其'/request-type'
作为第一个参数传递给app.use()
,此函数将仅适用于发送到 的请求localhost:3000/request-type
。
重新访问您的终端窗口并运行您的应用程序:
node server.js
然后,在您的 Web 浏览器中访问localhost:3000/request-type
。您的终端窗口将显示请求的时间戳和'Request type: GET'
。
现在,让我们尝试使用现有的中间件来提供静态文件。 Express 带有内置的中间件函数:express.static
。我们还将使用第三方中间件函数serve-index
来显示我们文件的索引列表。
首先,在 express 服务器所在的同一文件夹中,创建一个名为 的目录public
并在其中放置一些文件。
然后,安装包serve-index
:
npm install serve-index@1.9.1
首先,serve-index
在服务器文件顶部导入包。
然后,包含express.static
和serveIndex
中间件并告诉它们访问的路径和目录的名称:
const express = require('express');
const serveIndex = require('serve-index');
const app = express();
app.use((req, res, next) => {
console.log('Time: ', Date.now());
next();
});
app.use('/request-type', (req, res, next) => {
console.log('Request type: ', req.method);
next();
});
app.use('/public', express.static('public'));
app.use('/public', serveIndex('public'));
app.get('/', (req, res) => {
res.send('Successful response.');
});
app.listen(3000, () => console.log('Example app is listening on port 3000.'));
现在,重启服务器并导航到localhost:3000/public
。您将看到所有文件的列表!
结论
在本文中,您安装并使用 Express 构建了 Web 服务器。您还使用了内置和第三方中间件功能。
继续学习如何在 Express 中使用 req 对象、如何在 Express 中使用 res 对象以及如何在 Express 中定义路由和 HTTP 请求方法。