12 Node.js小白教程:HTTP模块之处理请求和响应的内容
在上篇文章中,我们介绍了如何使用 Node.js 创建一个简单的 HTTP 服务器。在这篇文章中,我们将深入探讨如何处理请求和响应的内容。这是理解 Node.js HTTP 模块的核心部分,能够帮助我们构建更加复杂和功能丰富的应用。
处理 HTTP 请求
当客户端(如浏览器)向我们的服务器发送请求时,服务器会接收到一个请求对象。在 Node.js 中,我们可以利用 http
模块的 createServer
方法来处理这些请求。该方法接收两个参数:一个处理请求的回调函数和一个可选的对象。
请求对象
请求对象包含了请求的所有信息,比如请求方法、请求头和请求路径等。我们通常对 req.method
和 req.url
非常感兴趣。
下面是一个简单示例,展示了如何处理 GET 和 POST 请求:
const http = require('http');
const server = http.createServer((req, res) => {
// 处理请求方法
if (req.method === 'GET') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('这是一个 GET 请求');
} else if (req.method === 'POST') {
let body = '';
req.on('data', chunk => {
body += chunk.toString(); // 将 Buffer 转换为字符串
});
req.on('end', () => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(`你发送的 POST 数据是: ${body}`);
});
} else {
res.writeHead(405, { 'Content-Type': 'text/plain' });
res.end('不支持的请求方法');
}
});
server.listen(3000, () => {
console.log('服务器正在监听 http://localhost:3000');
});
分析代码
在上面的代码中,我们创建了一个 HTTP 服务器并监听 3000 端口。根据 req.method
的值,我们可以判断请求的方法:
- 如果是
GET
方法,返回一段文本。 - 如果是
POST
方法,收集所有的数据块,并在end
事件触发时响应包含数据的结果。 - 对于其他方法,我们返回 405 状态码,表示不支持的请求方法。
处理 HTTP 响应
响应是指服务器如何返回数据给客户端。在处理 HTTP 响应时,我们需要设置正确的状态码和响应头信息,以及响应主体内容。
设置响应头
可以通过 res.writeHead
方法来设置响应头。该方法接收两个参数:状态码和一个对象,后者包含了响应头信息。
响应体
可以通过 res.end
方法结束响应,并可以传入响应体内容。
下面是一个完整的例子,演示如何返回 JSON 格式的数据:
const http = require('http');
const server = http.createServer((req, res) => {
// 处理请求路径
if (req.url === '/data' && req.method === 'GET') {
const jsonData = { message: '这是一个 JSON 响应', success: true };
// 设置响应头为 JSON 类型
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(jsonData)); // 发送 JSON 数据
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('未找到请求的资源');
}
});
server.listen(3000, () => {
console.log('服务器正在监听 http://localhost:3000');
});
在这个例子中,我们设置了一个 GET 请求,当访问 /data
路径时,返回 JSON 数据。这样,客户端将能以 JSON 格式接收数据。
小结
在这一篇中,我们学习了如何处理 HTTP 请求和响应的内容。掌握了如何获取请求信息,如何根据请求生成相应的响应内容。这是构建 Node.js 应用的核心技能。
下一篇文章中,我们将学习如何安装和使用 Express 框架,以减少在处理请求和响应时的复杂性。通过 Express,我们将能够以更加优雅和简洁的方式来处理 HTTP 请求和响应。确保继续关注!