如何开始使用Node.js和Express

来自菜鸟教程
跳转至:导航、​搜索

介绍

Express 是一个用于 Node.js 的 Web 应用程序框架,它允许您以更简单、更简洁的方式启动强大的 API 和 Web 服务器。 它是一个轻量级的包,不会掩盖 Node.js 的核心功能。

在本文中,您将安装并使用 Express 来构建 Web 服务器。

先决条件

如果您想继续阅读本文,您将需要:

  • Node.js 的本地开发环境。 关注【X7X】如何安装Node.js并创建本地开发环境【X76X】。

本教程已使用 Node v15.14.0、npm v7.10.0、express v4.17.1 和 serve-index v1.9.1 进行了验证。

第 1 步 — 设置项目

首先,打开终端窗口并创建一个新的项目目录:

mkdir express-example

然后,导航到新创建的目录:

cd express-example

此时,您可以初始化一个新的 npm 项目:

npm init -y

接下来,您需要安装 express 软件包:

npm install express@4.17.1

至此,您就有了一个可以使用 Express 的新项目。

第 2 步 — 创建 Express 服务器

现在已经安装了 Express,创建一个新的 server.js 文件并使用代码编辑器打开它。 然后,添加以下代码行:

服务器.js

const express = require('express');

const app = express();

这里的第一行是从您安装的包中获取主要的 Express 模块。 这个模块是一个函数,然后我们在第二行运行它来创建我们的 app 变量。 您可以通过这种方式创建多个应用程序,每个应用程序都有自己的请求和响应。

服务器.js

const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Successful response.');
});

这些代码行是我们告诉 Express 服务器如何处理对我们服务器的 GET 请求的地方。 Express 包含 POSTPUT 等类似的功能。 使用 app.post(...)app.put(...) 等。

这些函数有两个主要参数。 第一个是此函数要操作的 URL。 在这种情况下,我们的目标是 '/',它是我们网站的根:在这种情况下,是 localhost:3000

第二个参数是一个有两个参数的函数:reqresreq 表示发送到服务器的请求; 我们可以使用这个对象来读取关于客户端请求做什么的数据。 res 表示我们将发送回客户端的响应。

在这里,我们在 res 上调用一个函数来发回响应:'Successful response.'

服务器.js

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

然后,在您的网络浏览器中访问 localhost:3000。 您的浏览器窗口将显示:'Successful response'。 您的终端窗口将显示:'Example app is listening on port 3000.'

我们有了它,一个网络服务器! 但是,我们绝对希望向客户端发送的不仅仅是单行文本。 让我们简要介绍一下中间件是什么以及如何将此服务器设置为静态文件服务器!

第三步——使用中间件

使用 Express,我们可以编写和使用 中间件 函数,这些函数可以访问所有到达服务器的 HTTP 请求。 这些功能可以:

  • 执行任何代码。
  • 更改请求和响应对象。
  • 结束请求-响应周期。
  • 调用堆栈中的下一个中间件函数。

我们可以编写自己的中间件函数或使用第三方中间件,方法是像使用任何其他包一样导入它们。

让我们从编写自己的中间件开始,然后我们将尝试使用一些现有的中间件来提供静态文件。

要定义中间件函数,我们调用 app.use() 并将其传递给函数。 这是一个基本的中间件函数,用于在每次请求期间在控制台中打印当前时间:

服务器.js

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() 调用告诉中间件转到下一个中间件函数(如果有的话)。 在我们的函数末尾包含这一点很重要 - 否则,请求将卡在这个中间件上。

我们可以选择将路径传递给中间件,中间件只会处理对该路由的请求。 例如:

服务器.js

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

然后,在您的网络浏览器中访问 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.staticserveIndex 中间件,并告诉它们访问路径和目录名称:

服务器.js

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 请求方法[X186X ]。