Express 中的请求参数介绍
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 技术交流群。
上一篇: Express 中的 res 对象介绍
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论