Node.js 非常适合处理 HTTP 请求和响应。在本节中,我们将通过示例了解如何使用 Node.js 创建一个简单的 HTTP 服务器,并处理请求和响应。
创建基础 HTTP 服务器
首先,我们需要使用 Node.js 创建一个 HTTP 服务器。Node.js 的 http
模块提供了创建服务器所需的功能。
1 2 3 4 5 6 7 8 9 10 11 12
| const http = require('http');
const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello, World!\n'); });
const PORT = 3000; server.listen(PORT, () => { console.log(`服务器正在运行,监听端口 ${PORT}`); });
|
在上面的代码中,我们使用 http.createServer
创建了一个服务器。这个服务器会监听传入的请求,并使用回调函数来处理它们。
处理不同的请求方法
在实际应用中,我们经常需要根据请求的方法来执行不同的逻辑。常见的方法有 GET
和 POST
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| const http = require('http');
const server = http.createServer((req, res) => { if (req.method === 'GET') { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('这是一个 GET 请求\n'); } else if (req.method === 'POST') { let body = '';
req.on('data', chunk => { body += chunk.toString(); });
req.on('end', () => { res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ message: '这是一个 POST 请求', data: body })); }); } else { res.statusCode = 405; res.end('方法不允许\n'); } });
const PORT = 3000; server.listen(PORT, () => { console.log(`服务器正在运行,监听端口 ${PORT}`); });
|
在这个示例中,我们处理了 GET
和 POST
请求。对于 POST
请求,我们使用了事件监听器来收集数据,直到接收到所有数据块。
解析请求 URL
我们可以使用 Node.js 的 url
模块来解析请求的 URL。这样可以根据不同的路径提供不同的响应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const http = require('http'); const url = require('url');
const server = http.createServer((req, res) => { const parsedUrl = url.parse(req.url, true); const pathname = parsedUrl.pathname;
if (pathname === '/hello') { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('你好,欢迎访问 /hello!\n'); } else { res.statusCode = 404; res.setHeader('Content-Type', 'text/plain'); res.end('未找到该路径\n'); } });
const PORT = 3000; server.listen(PORT, () => { console.log(`服务器正在运行,监听端口 ${PORT}`); });
|
在这段代码中,我们使用 url.parse
解析请求的 URL,并根据请求的路径做出不同的响应。
处理查询字符串
我们还可以处理 URL 中的查询字符串,以更灵活地响应请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const http = require('http'); const url = require('url');
const server = http.createServer((req, res) => { const parsedUrl = url.parse(req.url, true); const query = parsedUrl.query;
if (parsedUrl.pathname === '/greet') { const name = query.name || '游客'; res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end(`你好,${name}!\n`); } else { res.statusCode = 404; res.end('未找到该路径\n'); } });
const PORT = 3000; server.listen(PORT, () => { console.log(`服务器正在运行,监听端口 ${PORT}`); });
|
在此示例中,我们处理了一个名为 /greet
的路径,并根据查询字符串中的 name
参数做出个性化的回应。
小结
到这里,我们简单地介绍了如何使用 Node.js 处理 HTTP 请求和响应。通过创建服务器、处理不同的方法、解析 URL 和查询字符串,我们可以构建出功能强大的网络应用程序。希望通过这些示例能帮助你更好地掌握 Node.js 的请求和响应处理。