Express请求和响应
2024-08-17
request对象
方法/属性 | 用途 |
---|---|
req.params | 包含路由参数的对象 |
req.query | 包含查询字符串参数的对象 |
req.body | 包含请求体数据的对象(需要使用中间件如 express.json() 解析) |
req.cookies | 包含请求发送的 cookies 的对象(需要 cookie-parser 中间件) |
req.get(field) | 获取指定的请求头字段 |
req.is(type) | 检查请求的 Content-Type 是否匹配指定的类型 |
req.path | 包含请求路径 |
req.hostname | 获取主机名 |
req.ip | 获取客户端 IP 地址 |
req.method | 获取 HTTP 请求方法 |
response对象
方法 | 用途 |
---|---|
res.send(body) | 发送 HTTP 响应 |
res.json(body) | 发送 JSON 响应 |
res.status(code) | 设置 HTTP 状态码 |
res.sendStatus(code) | 设置状态码并发送其字符串表示作为响应体 |
res.render(view [, locals] [, callback]) | 渲染视图模板 |
res.redirect([status,] path) | 重定向请求 |
res.set(field [, value]) | 设置响应头 |
res.cookie(name, value [, options]) | 设置 cookie |
res.clearCookie(name [, options]) | 清除 cookie |
res.download(path [, filename] [, options] [, fn]) | 传送文件作为附件 |
res.sendFile(path [, options] [, fn]) | 传送文件 |
res.end([data] [, encoding]) | 结束响应进程 |
这些是 Express 中 req
和 res
对象的一些常用方法和属性。每个方法都有其特定的用途,可以帮助您处理 HTTP 请求和构造 HTTP 响应。
取参数
在 Express 中,有多种方式可以传递 HTTP 参数,每种方式都有对应的方法来获取这些参数。我会为您列出常见的参数传递方式,以及如何使用 request
(通常简写为 req
) 对象来获取这些参数。
参数传递方式 | 如何传递 | 如何使用 request 获取 | 示例 |
---|---|---|---|
路由参数 | 在 URL 路径中,以 :参数名 形式 | req.params.参数名 | 路由: /user/:id URL: /user/123 获取: req.params.id |
查询字符串 | 在 URL 中,以 ?key=value 形式 | req.query.参数名 | URL: /search?q=express 获取: req.query.q |
请求体 (JSON) | 在请求体中发送 JSON 数据 | req.body.属性名 (需要 express.json() 中间件) | POST 请求体: {"name": "John"} 获取: req.body.name |
请求体 (Form) | 在请求体中发送表单数据 | req.body.字段名 (需要 express.urlencoded() 中间件) | 表单字段: <input name="username"> 获取: req.body.username |
Headers | 在 HTTP 请求头中 | req.get('头名称') 或 req.headers['头名称'] | 获取 User-Agent:req.get('User-Agent') |
Cookies | 在请求的 Cookie 头中 | req.cookies.cookie名 (需要 cookie-parser 中间件) | Cookie: token=abc123 获取: req.cookies.token |
使用示例:
javascript
const express = require('express');
const app = express();
// 中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 路由参数
app.get('/user/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID: ${userId}`);
});
// 查询字符串
app.get('/search', (req, res) => {
const searchTerm = req.query.q;
res.send(`Search term: ${searchTerm}`);
});
// JSON 请求体
app.post('/api/data', (req, res) => {
const name = req.body.name;
res.send(`Name: ${name}`);
});
// 表单数据
app.post('/submit-form', (req, res) => {
const username = req.body.username;
res.send(`Username: ${username}`);
});
// Headers
app.get('/headers', (req, res) => {
const userAgent = req.get('User-Agent');
res.send(`User Agent: ${userAgent}`);
});
app.listen(3000, () => console.log('Server running on port 3000'));
请注意,对于请求体数据(如 JSON 或表单数据),你需要使用相应的中间件来解析请求体。对于 cookies,你可能需要额外安装和使用 cookie-parser
中间件。
这些方法覆盖了在 Express 应用中获取各种 HTTP 参数的主要方式。根据你的具体需求,你可以选择合适的方法来获取所需的参数。