Express 中的 res 对象介绍

发布于 2022-08-11 12:40:04 字数 5082 浏览 253 评论 0

Express 路由处理程序和中间件函数的第二个参数是 Express 响应对象 ,通常称为 resres 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 技术交流群。

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

发布评论

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

关于作者

拥抱影子

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

留蓝

文章 0 评论 0

18790681156

文章 0 评论 0

zach7772

文章 0 评论 0

Wini

文章 0 评论 0

ayeshaaroy

文章 0 评论 0

初雪

文章 0 评论 0

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