Express 中的请求参数介绍

发布于 2022-08-11 12:36:28 字数 5047 浏览 240 评论 0

Express 路由处理程序和中间件函数的第一个参数是 Express 请求对象 。 这个参数通常被称为 req

const express = require('express');
const app = express();

app.get('*', function(req, res) {
  // `req` is an instance of Node.js' built-in HTTP request class,
  // with some additional features from Express
  req instanceof require('http').IncomingMessage; // true

  res.json({ ok: 1 });
});

const server = await app.listen(3000);

请求参数

Express 默认解析 查询字符串 参数,并将其放入 req.query 变量中

const axios = require('axios');
const express = require('express');
const app = express();

app.get('*', function(req, res) {
  const name = req.query.name; // 'Jean-Luc Picard'
  const rank = req.query.rank; // 'Captain'
  res.json({ name, rank });
});

const server = await app.listen(3000);

// Send a GET request to the server with URL-encoded params in the
// query string
const querystring = 'name=Jean-Luc Picard&rank=Captain';
const res = await axios.get('http://localhost:3000?' + querystring);

res.data.name; // 'Jean-Luc Picard'
res.data.rank; // 'Captain'

Express 还支持 命名路由参数 并将它们放在 req.params 变量中。 命名路由参数总是字符串,Express 使用 decodeUriComponent()

const axios = require('axios');
const express = require('express');
const app = express();

app.get('/:model/:id', function(req, res) {
  const model = req.params.model; // 'user'
  const id = req.params.id; // '1'
  res.json({ model, id });
});

const server = await app.listen(3000);

// Send a GET request to the server with URL params
const res = await axios.get('http://localhost:3000/user/1');

res.data.model; // 'user'
res.data.id; // '1'

Express 不会 解析 请求正文 。 要选择解析 JSON 请求正文,请使用 express.json() 中间件 。 Express 然后会解析 HTTP 请求体,并将解析后的请求体放入 req.body

const axios = require('axios');
const express = require('express');
const app = express();

// Parse the request body as JSON. Requires Express >= 4.16.0.
app.use(express.json());

app.put('*', function(req, res) {
  const name = req.body.name; // 'Jean-Luc Picard'
  const rank = req.body.rank; // 'Captain'
  res.json({ name, rank });
});

const server = await app.listen(3000);

// Send a PUT request to the server with a request body
const body = { name: 'Jean-Luc Picard', rank: 'Captain' };
const res = await axios.put('http://localhost:3000', body);

res.data.name; // 'Jean-Luc Picard'
res.data.rank; // 'Captain'

请求标头

要获取 HTTP 请求标头 ,您应该使用 Express 的 req.get() 功能 。 你也可以使用 Node.js 的原生 req.headers 变量

const axios = require('axios');
const express = require('express');
const app = express();

app.get('*', function(req, res) {
  // `req.get()` is case-insensitive.
  const authorization = req.get('authorization');

  // Or you can use `req.headers`
  req.headers.authorization;

  res.json({ authorization });
});

const server = await app.listen(3000);

// Send a GET request to the server with an 'Authorization' header
const res = await axios.get('http://localhost:3000', {
  headers: {
    'Authorization': 'test'
  }
});

res.data.authorization; // 'test'

这里有一个 关于如何在 Axios 中设置请求标头的教程,如果您不熟悉 Axios,

Body 大小限制

默认, express.json() 将请求正文限制为 100kb 。 如果请求体更大,Express 将抛出 HTTP 413 "Payload Too Large" 错误 。 您可以使用 limit 选项 express.json()

const axios = require('axios');
const express = require('express');
const app = express();

// Set the body size limit to 10 bytes
app.use(express.json({ limit: 10 }));

app.put('*', function(req, res) {
  const name = req.body.name; // 'Jean-Luc Picard'
  const rank = req.body.rank; // 'Captain'
  res.json({ name, rank });
});

const server = await app.listen(3000);

// Send a PUT request to the server with a request body
const body = { name: 'Jean-Luc Picard', rank: 'Captain' };
const err = await axios.put('http://localhost:3000', body).
  catch(err => err);

err.response.status; // 413

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

风情万种。

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

留蓝

文章 0 评论 0

18790681156

文章 0 评论 0

zach7772

文章 0 评论 0

Wini

文章 0 评论 0

ayeshaaroy

文章 0 评论 0

初雪

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文