响应对象是 Node.js 中 http
模块的核心组成部分之一。它用于处理服务器发送给客户端的数据和信息。理解如何使用响应对象对于构建高性能的 Web 应用程序至关重要。
创建响应对象
响应对象通常通过 http.createServer()
方法创建。当一个请求到达服务器时,这个方法会触发一个回调函数,在该函数内部,你可以访问到一个代表请求的 request
对象以及一个代表响应的 response
对象。
const http = require('http'); http.createServer((req, res) => { // 在这里操作 res 对象 }).listen(3000);
设置响应状态码
响应状态码告诉客户端请求的结果。最常见的是 200 表示成功,404 表示未找到资源,500 表示服务器内部错误等。你可以使用 res.statusCode
来设置状态码。
res.statusCode = 200;
设置响应头
响应头包含有关响应的信息,如内容类型、缓存策略等。使用 res.setHeader(key, value)
方法来添加或修改响应头。
res.setHeader('Content-Type', 'text/html');
或者一次性添加多个响应头:
res.writeHead(200, { 'Content-Type': 'text/plain', 'Cache-Control': 'no-cache' });
发送数据
响应对象提供了多种方法来向客户端发送数据。res.end()
是最基本的发送方法,它既可以发送字符串也可以发送 Buffer 对象。
res.end('<html><body>你好,世界</body></html>');
如果需要分多次发送数据,可以使用 res.write()
方法,最后调用 res.end()
结束响应。
res.write('<html><head><title>我的网页</title></head>'); res.write('<body>欢迎来到我的网页</body></html>'); res.end();
处理流数据
对于大文件或实时数据流,使用流可以更高效地处理响应。你可以通过管道将读取流直接连接到响应对象上。
const fs = require('fs'); fs.createReadStream('example.txt').pipe(res);
这样可以避免内存溢出,并且能够实现高效的数据传输。
设置编码
虽然默认情况下响应内容可能是 UTF-8 编码,但有时你需要明确指定编码方式。
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
错误处理
在处理响应时,错误处理是一个不可忽视的部分。确保你的应用能优雅地处理各种异常情况,比如网络问题或文件不存在的情况。
try { // 一些可能抛出错误的操作 } catch (error) { console.error(error); res.statusCode = 500; res.end('服务器发生错误'); }
总结
响应对象是 Node.js 中处理 HTTP 请求的关键部分。掌握如何正确地设置状态码、响应头、发送不同类型的数据,以及如何处理流和错误,对于开发可靠的 Web 应用程序非常重要。希望本章的内容能帮助你更好地理解和使用 Node.js 的响应对象。