第3章 Express 的请求与响应(二)

2 设置响应数据

在 Express 中,可以通过 res 对象设置 HTTP 响应。常见的响应方法包括 res.sendres.jsonres.statusres.sendFile 等。

2.1 发送文本和 JSON 响应

发送文本响应:

app.get('/text', (req, res) => {
    res.send('Hello, world!');
});

发送 JSON 响应:

app.get('/json', (req, res) => {
    const data = { message: 'Hello, world!' };
    res.json(data);
});

代码详解:

  • res.send('Text'):发送文本响应。
  • res.json({ key: 'value' }):发送 JSON 响应。
2.2 设置响应状态码

可以通过 res.status 方法设置 HTTP 响应状态码。

示例:

app.get('/not-found', (req, res) => {
    res.status(404).send('Resource not found');
});

代码详解:

  • res.status(404).send('Message'):设置响应状态码为 404,并发送响应消息。
2.3 发送文件

可以通过 res.sendFile 方法发送文件作为响应。

示例:

const path = require('path');

app.get('/file', (req, res) => {
    const filePath = path.join(__dirname, 'public', 'example.txt');
    res.sendFile(filePath);
});

在这里插入图片描述

代码详解:

  • res.sendFile(filePath):发送文件作为响应。
3 处理表单数据

处理表单数据是 Web 应用程序的常见需求。通常使用 POST 请求发送表单数据,并使用中间件解析请求体。

示例:

<!DOCTYPE html>
<html>
<head>
    <title>Form</title>
</head>
<body>
    <form action="/submit-form" method="POST">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

服务器端代码:

app.use(express.urlencoded({ extended: true }));

app.post('/submit-form', (req, res) => {
    // 获取表单数据
    const name = req.body.name;
    res.send(`Form submitted! Name: ${name}`);
});

代码详解:

  • express.urlencoded({ extended: true }):解析 URL 编码的请求体,将结果存储在 req.body
  • req.body.name:访问表单数据中的 name 字段。
4 使用查询参数

查询参数是 URL 中的键值对,通常用于传递额外的数据。可以通过 req.query 访问查询参数。

示例:

app.get('/search', (req, res) => {
    const term = req.query.term;
    const sort = req.query.sort;
    res.send(`Search term: ${term}, Sort order: ${sort}`);
});

当用户访问 /search?term=express&sort=desc 时,响应内容将为 “Search term: express, Sort order: desc”。

代码详解:

  • req.query:获取查询参数,返回一个对象。
5 处理文件上传

处理文件上传是许多 Web 应用程序的重要功能。可以使用 multer 中间件处理文件上传。

安装 multer

npm install multer --save

配置 multer

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('file'), (req, res) => {
    const file = req.file;
    res.send(`File uploaded: ${file.originalname}`);
});

代码详解:

  • multer({ dest: 'uploads/' }):配置 multer,将上传的文件保存到 uploads 目录。
  • upload.single('file'):处理单个文件上传,file 是表单字段的名称。
  • req.file:访问上传的文件信息。

HTML 表单示例:

<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <label for="file">Choose file:</label>
        <input type="file" id="file" name="file">
        <button type="submit">Upload</button>
    </form>
</body>
</html>

通过本章内容,读者应该能够理解并掌握如何在 Express 中处理 HTTP 请求和响应,包括解析请求数据、设置响应数据、处理表单数据、使用查询参数和处理文件上传。这些知识是开发功能丰富的 Web 应用程序的基础。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Express 是一个基于 Node.js 的 Web 应用框架,可以轻松地创建和部署 Web 服务器。 在 Express 中,可以使用 `res.send()` 方法来向客户端发送 HTTP 响应。它接受一个参数,表示要发送给客户端的内容。 如果要发送多个 GET 请求,可以使用 JavaScript 的循环语句,在循环内部使用 `res.send()` 方法发送响应。 例如,假设有一个 GET 请求的路由处理函数,要发送多个请求,可以使用以下代码: ```javascript app.get('/', (req, res) => { for (let i = 0; i < 10; i++) { res.send(`This is request number ${i}`); } }); ``` 在这个例子中,循环将会发送 10 个请求,每个请求的内容都是一个字符串,表示这是第几个请求。 注意:这样做并不是很常见,通常只有在特殊情况下才会这样做。通常情况下,客户端只会发送一个请求,服务器只需要返回一个响应即可。 ### 回答2: 在Express中使用`res.send`只能发送一个get请求。但是可以通过使用其他方式来发送多个get请求。 一种方法是使用`axios`库来发送多个get请求。首先,要安装并引入`axios`库。然后,在处理请求的路由中,可以使用`axios.all`来发送多个get请求,并使用`axios.spread`来处理返回的结果。示例如下: ```javascript const axios = require('axios'); app.get('/multipleRequests', async (req, res) => { try { const request1 = axios.get('https://api.example.com/request1'); const request2 = axios.get('https://api.example.com/request2'); const [response1, response2] = await axios.all([request1, request2]); res.send({ response1: response1.data, response2: response2.data }); } catch (error) { console.error(error); res.status(500).send('Internal Server Error'); } }); ``` 另一种方法是使用`Promise`来发送多个get请求。在处理请求的路由中,可以使用`Promise.all`方法来发送多个get请求,并使用`Promise.then`方法来处理返回的结果。示例如下: ```javascript app.get('/multipleRequests', async (req, res) => { try { const request1 = new Promise((resolve, reject) => { axios.get('https://api.example.com/request1') .then(response => resolve(response.data)) .catch(error => reject(error)); }); const request2 = new Promise((resolve, reject) => { axios.get('https://api.example.com/request2') .then(response => resolve(response.data)) .catch(error => reject(error)); }); const [response1, response2] = await Promise.all([request1, request2]); res.send({ response1: response1, response2: response2 }); } catch (error) { console.error(error); res.status(500).send('Internal Server Error'); } }); ``` 这些方法可以通过发送多个get请求并将结果合并后,通过`res.send`发送给客户端。 ### 回答3: 在 Express 中,我们无法直接通过 res.send() 方法发送多个 GET 请求。res.send() 方法用于向客户端发送一个响应,通常是一个 HTML 页面或一个 JSON 对象。 然而,我们可以通过编写服务器端代码来实现发送多个 GET 请求的功能。首先,我们需要使用一个 HTTP 请求库,比如 axios 或者 node-fetch 来发送 GET 请求。接下来,我们可以在服务器端定义一个路由处理器,当用户访问该路由时,我们在路由处理器中使用这个 HTTP 请求库发送多个 GET 请求,并获取每个请求的结果。最后,我们可以将获取到的结果通过 res.send() 方法发送给客户端。 以下是一个使用 axios 库发送多个 GET 请求的示例: const express = require('express'); const axios = require('axios'); const app = express(); app.get('/multiple-requests', async (req, res) => { try { const response1 = await axios.get('https://api.example.com/endpoint1'); const response2 = await axios.get('https://api.example.com/endpoint2'); const response3 = await axios.get('https://api.example.com/endpoint3'); const responseData = { response1Data: response1.data, response2Data: response2.data, response3Data: response3.data }; res.send(responseData); } catch (error) { res.status(500).send('An error occurred'); } }); app.listen(3000, () => { console.log('Server listening on port 3000'); }); 在上述示例中,我们定义了一个路由处理器 '/multiple-requests',当用户访问该路由时,我们使用 axios 库发送了多个 GET 请求,并将每个请求的结果保存在 responseData 对象中。最后,我们将 responseData 对象通过 res.send() 方法发送给客户端。 需要注意的是,由于异步操作,我们通过 await 关键字确保每个请求在发送后按顺序等待响应返回。同时,为了处理错误情况,我们使用 try...catch 语句来捕获可能的异常。如果其中一个请求出错,我们将发送一个错误响应给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值