Express 中的 res 对象介绍
Express 路由处理程序和中间件函数的第二个参数是 Express 响应对象 ,通常称为 res
,res
object 公开了几个函数,可让您配置和发送对 HTTP 请求的响应。
基本反应使用 res.send()
res.send()
函数 是发送 HTTP 响应的最基本方法。 调用 res.send()
使用字符串发送响应,其中字符串作为响应主体, 内容类型 设置为 'text/html; charset=utf-8'
。
const axios = require('axios');
const express = require('express');
const app = express();
app.get('*', function(req, res) {
res.send('Hello, World');
});
const server = await app.listen(3000);
const response = await axios.get('http://localhost:3000');
response.data; // 'Hello, World'
response.headers['content-type']; // 'text/html; charset=utf-8'
JSON 响应使用 res.json()
res.send()
函数在实践中很少使用,因为 Express 响应有几个方便的辅助函数。 如果你正在构建一个 RESTful API 或另一个以 JSON 格式发送响应的后端服务,你应该使用 res.json()
功能 。 这 res.json()
函数使用将给定对象转换为 JSON JSON.stringify()
并将 内容类型设置为 'application/json; charset=utf-8'
.
const axios = require('axios');
const express = require('express');
const app = express();
app.get('*', function(req, res) {
res.json({ answer: 42 });
});
const server = await app.listen(3000);
const response = await axios.get('http://localhost:3000');
response.data; // { answer: 42 }
response.headers['content-type']; // 'application/json; charset=utf-8'
渲染模板语言
Express 支持 几种不同的流行模板语言 。 例如,您可以使用 Pug 语言 (以前称为 Jade),鉴于以下 Pug 代码 views/test.pug
:
h1= message
下面的 Express 路由处理程序将呈现一个 h1
包含“你好,世界”的标签。 您不需要安装 pug 或显式 require()
哈巴狗
const axios = require('axios');
const express = require('express');
const app = express();
// Set 'pug' as the view engine
app.set('view engine', 'pug');
app.get('*', function(req, res) {
// Loads `views/test.pug` and renders it with the given `locals`
const locals = { message: 'Hello, World' };
res.render('test', locals);
});
const server = await app.listen(3000);
const response = await axios.get('http://localhost:3000');
response.data; // '<h1>Hello, World</h1>'
设置响应状态
这 res.status()
功能 可让您设置响应状态。 不像 res.send()
, res.json()
和 res.render()
, res.status()
实际上 并不 发送响应。 这就是为什么你通常会看到 res.status().json()
或者 res.status().render()
。
const axios = require('axios');
const express = require('express');
const app = express();
app.get('*', function(req, res) {
// Sets the response status to 201 "Created". The response status
// is 200 "OK" by default.
res.status(201).json({ ok: 1 });
});
const server = await app.listen(3000);
const response = await axios.get('http://localhost:3000');
response.status; // 201
响应标头
这 res.status()
函数 让您设置 HTTP 响应标头 。 下面的示例演示了手动设置发送 SVG 图像 。
const axios = require('axios');
const express = require('express');
const app = express();
app.get('*', function(req, res) {
// Setting content-type means Chrome will treat this endpoint as
// an image to download rather than a page to display.
res.set('content-type', 'image/svg+xml').send(`
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="blue" stroke-width="4" fill="white" />
</svg>
`);
});
const server = await app.listen(3000);
const response = await axios.get('http://localhost:3000');
response.headers['content-type']; // image/svg+xml; charset=utf-8
如果您不发送响应会发生什么?
在 Express 中,您有责任使用 res.json()
, res.send()
, res.end()
或者 res.render()
,否则请求将永远挂起。 Express 不会 如果您不发送响应:
// Express won't throw an error, but any request to this endpoint will hang
// forever because there's no `res.send()`.
app.get('*', function(req, res) {
res.status(201);
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Express 中的错误处理中间件
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论