实现步骤
- 创建一个HTTP服务器。
- 监听
request
事件,判断请求的路径是否为 /api
且请求方法是否为 POST
。
- 读取请求体数据,因为请求体是JSON格式,所以读取完成后需要解析JSON数据。
- 修改解析后的JSON数据中的
name
字段值为 new_name
。
- 将修改后的JSON数据字符串化,然后重新设置请求体数据。
- 正常转发请求。
代码示例
const http = require('http');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
let body = '';
if (req.url === '/api' && req.method === 'POST') {
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
try {
const jsonBody = JSON.parse(body);
jsonBody.name = 'new_name';
const newBody = JSON.stringify(jsonBody);
// 这里实际上无法直接修改原请求体,只是构造新的请求体数据用于转发
// 模拟转发请求,这里简单打印新的请求体数据
console.log('New request body for forwarding:', newBody);
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(newBody);
} catch (e) {
res.writeHead(400, { 'Content-Type': 'text/plain' });
res.end('Invalid JSON in request body');
}
});
} else {
// 非/api路径下的POST请求,正常处理
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Not an /api POST request');
}
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running on port ${port}`);
});
可能遇到的问题及解决方案
- 请求体解析失败:如果请求体不是合法的JSON格式,
JSON.parse
会抛出错误。解决方案是在 JSON.parse
外面包裹 try...catch
块,如上述代码示例,捕获错误并返回合适的错误响应,告知客户端请求体格式有误。
- 数据丢失或损坏:在数据读取过程中,可能因为网络问题导致数据丢失或损坏。可以通过增加数据校验机制,例如计算数据的哈希值并在接收端验证。同时,确保合理设置
data
事件和 end
事件的处理逻辑,避免数据处理不完整。
- 转发请求问题:在实际应用中,真正的转发可能涉及到与其他服务器进行通信,可能会遇到跨域、连接超时等问题。对于跨域问题,可以在响应头中设置合适的跨域相关字段(如
Access-Control-Allow-Origin
等);对于连接超时问题,可以设置合理的超时时间,在请求超时时返回合适的错误信息给客户端。