Express 中 res 响应方法详解
一、`res.send()`
1. 功能
该方法用于发送各种类型的响应,包括字符串、对象、数组、Buffer 等。它会自动设置响应的 `Content-Type` 头。
2. 示例代码
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello, World!");
});
app.get("/data", (req, res) => {
const data = { message: "This is some data" };
res.send(data);
});
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
二、`res.json()`
1. 功能
专门用于发送 JSON 响应,它会将传入的对象或数组转换为 JSON 字符串,并设置 `Content-Type` 为 `application/json`。
2. 示例代码
app.get("/json-data", (req, res) => {
const jsonData = { name: "John", age: 30 };
res.json(jsonData);
});
三、`res.sendFile()`
1. 功能
用于发送文件作为响应,需要指定文件的绝对路径。可以设置一些可选参数,如 `root` 来指定文件的根目录。
2. 示例代码
const path = require("path");
app.get("/download", (req, res) => {
const filePath = path.join(__dirname, "public", "example.txt");
res.sendFile(filePath);
});
四、`res.status()`
1. 功能
用于设置响应的 HTTP 状态码,它可以链式调用其他响应方法。
2. 示例代码
app.get("/error", (req, res) => {
res.status(404).send("Page not found");
});
五、`res.redirect()`
1. 功能
用于将客户端重定向到另一个 URL。可以指定相对路径或绝对路径,还可以设置重定向的状态码(默认为 302)。
2. 示例代码
app.get("/old-page", (req, res) => {
res.redirect("/new-page");
});
app.get("/permanent-redirect", (req, res) => {
res.redirect(301, "https://example.com");
});
六、`res.set()` 和 `res.get()`
1. 功能
`res.set()` 用于设置响应头。可以传入一个键值对来设置单个响应头,也可以传入一个对象来一次性设置多个响应头。
`res.get()` 用于获取响应头的值。
2. 示例代码
app.get("/custom-header", (req, res) => {
res.set("Custom-Header", "Custom Value");
const headerValue = res.get("Custom-Header");
console.log(headerValue); // 输出: Custom Value
res.send("Response with custom header");
});
七、`res.cookie()`
1. 功能
用于设置 HTTP Cookie。可以指定 Cookie 的名称、值以及一些可选参数,如过期时间、路径、域等。
2. 示例代码
const cookieParser = require("cookie-parser");
app.use(cookieParser());
app.get("/set-cookie", (req, res) => {
res.cookie("username", "John", { maxAge: 900000, httpOnly: true });
res.send("Cookie set");
});
八、`res.clearCookie()`
1. 功能
用于清除客户端的 Cookie。需要指定要清除的 Cookie 的名称。
2. 示例代码
app.get("/clear-cookie", (req, res) => {
res.clearCookie("username");
res.send("Cookie cleared");
});