如何使用 Express 读取 URL 和 POST 参数

介绍

通常,当您使用 Express构建应用程序时,您需要从用户那里获得信息,其中最流行的两种方法是URL参数和POST参数。

在本文中,您将了解如何使用Express从请求中获取URL参数和POST参数。

前提条件

要完成本教程,您将需要:

<$>[注] **注:**此前,本教程建议使用req.param。从 v4.11.0 开始,此教程还建议安装body-parser。从 v4.16.0 开始,这不再是必要的。

本教程已通过 Node v15.4.0、npm v7.10.0 和 express v4.17.1 进行验证。

步骤1 - 设置项目

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

1mkdir express-params-example

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

1cd express-params-example

在此时刻,您可以启动一个新的 npm 项目:

1npm init -y

接下来,您需要安装快递包:

1npm install [email protected]

在此时刻,你有一个新的项目准备使用Express。

创建一个新的 server.js 文件,并使用代码编辑器打开它:

 1[label server.js]
 2const express = require('express');
 3
 4const app = express();
 5const port = process.env.PORT || 8080;
 6
 7// routes will go here
 8
 9app.listen(port);
10console.log('Server started at http://localhost:' + port);

查看您的终端窗口并运行您的应用程序:

1node server.js

<$>[注] 每次编辑 `server.js 时,您将不得不重新启动节点服务器。

现在让我们创建两个路径来测试抓取参数。

步骤 2 – 使用req.query与 URL 参数

「req.query」可用于检索 URL 参数的值。

考虑下面的例子:

1http://example.com/api/users?id=4&token=sdfa3&geo=us

此URL包含idtokengeo(地理位置)的参数:

1id: 4
2token: sdfa3
3geo: us

用代码编辑器修复server.js,并为req.query.id,req.query.tokenreq.query.geo添加以下代码行:

 1[label server.js]
 2// ...
 3
 4// routes will go here
 5// ...
 6
 7app.get('/api/users', function(req, res) {
 8  const user_id = req.query.id;
 9  const token = req.query.token;
10  const geo = req.query.geo;
11
12  res.send({
13    'user_id': user_id,
14    'token': token,
15    'geo': geo
16  });
17});
18
19app.listen(port);
20console.log('Server started at http://localhost:' + port);

当服务器运行时,使用URL http://localhost:8080/api/users?id=4&token=sdfa3&geo=us在网页浏览器中或在邮局。

服务器将用user_id,tokengeo值回复。

步骤 3 – 使用req.params与路线

「req.params」可用于从路径中获取值。

请参阅以下URL:

1http://localhost:8080/api/1

此 URL 包含「api」和「:version」的路線(「1」)。

用代码编辑器修复server.js,并为req.params.version添加以下代码行:

 1[label server.js]
 2// ...
 3
 4// routes will go here
 5// ...
 6
 7app.get('/api/:version', function(req, res) {
 8  res.send(req.params.version);
 9});
10
11app.listen(port);
12console.log('Server started at http://localhost:' + port);

当服务器运行时,使用URL http://localhost:8080/api/1在网页浏览器中或与邮政员一起。

服务器将用版本值回复。

步骤 4 – 使用.param与路由处理器

接下来,您正在使用 Express .param 函数来捕捉特定参数,这被认为是中间件,并且在呼叫路线之前会运行。

这可以用于验证(例如检查用户是否存在)或获取有关该用户或项目的重要信息。

请参阅以下URL:

1http://localhost:8080/api/users/sammy

此URL包含用户名称(Sammy)的路线。

用代码编辑器修复server.js,并添加以下代码行以更改名称:

 1[label server.js]
 2// ...
 3
 4app.param('name', function(req, res, next, name) {
 5  const modified = name.toUpperCase();
 6
 7  req.name = modified;
 8  next();
 9});
10
11// routes will go here
12// ...
13
14app.get('/api/users/:name', function(req, res) {
15  res.send('Hello ' + req.name + '!');
16});
17
18app.listen(port);
19console.log('Server started at http://localhost:' + port);

当服务器运行时,请在 Web 浏览器中或在 Postman 中使用 URL http://localhost:8080/api/users/sammy

服务器将回复:

1[secondary_label Output]
2Hello SAMMY!

您可以使用这个param中间软件进行验证,并确保传输的信息是有效的和正确的格式。

然后将信息保存到请求中(‘req’),以便其他路径可以访问它。

步骤 5 – 使用req.body与 POST 参数

「express.json()」和「express.urlencoded()」是内置的中间软件功能,可支持 JSON 编码和 URL 编码的实体。

使用代码编辑器打开server.js,并添加以下代码行:

 1[label server.js]
 2const express = require('express');
 3
 4const app = express();
 5const port = process.env.PORT || 8080;
 6
 7app.use(express.json());
 8app.use(express.urlencoded({ extended: true }));
 9
10// ...

接下来,添加app.postreq.body.id,req.body.tokenreq.body.geo:

 1[label server.js]
 2// ...
 3
 4// routes will go here
 5// ...
 6
 7app.post('/api/users', function(req, res) {
 8  const user_id = req.body.id;
 9  const token = req.body.token;
10  const geo = req.body.geo;
11
12  res.send({
13    'user_id': user_id,
14    'token': token,
15    'geo': geo
16  });
17});
18
19app.listen(port);
20console.log('Server started at http://localhost:' + port);

当服务器运行时,使用邮件人生成一个 POST 请求。

<$>[注] 注: 如果您需要协助导航邮政员界面的请求,请参阅 官方文档

设置请求类型为POST,请求URL为http://localhost:8080/api/users。 然后设置Bodyx-www-form-urlencoded

然后,提供以下值:

KeyValue
id4
tokensdfa3
geous

在提交回复后,服务器将回复user_id,tokengeo值。

结论

在本文中,您了解了如何使用 Express 来从请求中获取 URL 参数和 POST 参数。

继续学习使用 学习如何使用 Express 4.0 路由器如何使用 Express 交付 HTML 文件

Published At
Categories with 技术
Tagged with
comments powered by Disqus