本文将介绍如何在 Node.js 环境中处理 GET 和 POST 请求的数据,包括如何解析 URL 参数和表单数据。
在 Node.js 中,可以通过以下方式处理 GET 请求:
const http = require('http'); const url = require('url'); const querystring = require('querystring');
创建一个 HTTP 服务器来监听 GET 请求:
http.createServer((req, res) => { const pathname = url.parse(req.url).pathname; // 获取请求路径 const paramStr = url.parse(req.url).query; // 获取请求 GET 数据字符串 const param = querystring.parse(paramStr); // 解析 GET 数据字符串为 JSON 对象 console.log(`Pathname: ${pathname}`); console.log(`Query String: ${paramStr}`); console.log(`Parsed Query:`, param); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }).listen(200, '127.0.0.1');
POST 方法 处理 POST 请求时,需要读取请求体中的数据。以下是处理 POST 请求的示例代码:
const http = require('http'); const url = require('url'); const fs = require('fs'); const querystring = require('querystring');
创建一个 HTTP 服务器来监听 POST 请求:
http.createServer((req, res) => { const pathName = url.parse(req.url).pathname; switch (pathName) { case '/add': resAdd(req, res); break; default: resDefault(res); break; } }).listen(211, '127.0.0.1');
定义默认响应函数:
function resDefault(res) { const readPath = __dirname + '/' + url.parse('index.html').pathname; const indexPage = fs.readFileSync(readPath); res.writeHead(200, {'Content-Type': 'text/html'}); res.end(indexPage); }
定义处理 POST 请求的函数:
function resAdd(req, res) { let postData = ''; req.setEncoding('utf8'); req.on('data', (postDataChunk) => { postData += postDataChunk; }); req.on('end', () => { const param = querystring.parse(postData); console.log(`Post Data: ${postData}`); console.log(`Parsed Post Data:`, param); res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Success'); }); }
关联的 HTML 文件 下面是一个简单的 HTML 表单,用于测试 POST 请求:
结合 GET 和 POST 请求 为了更好地管理请求,可以将 GET 和 POST 的处理逻辑封装成模块:
let _res, _req; const url = require('url'); const querystring = require('querystring'); const http = require('http');
初始化响应和请求对象:
exports.init = function(res, req) { _res = res; _req = req; }
获取 GET 参数:
exports.GET = function(key) { const paramStr = url.parse(_req.url).query; const param = querystring.parse(paramStr); return param[key] ? param[key] : ''; }
获取 POST 参数:
exports.POST = function(key, callback) { let postData = ''; _req.on('data', (postDataChunk) => { postData += postDataChunk; }); _req.on('end', () => { const param = querystring.parse(postData); const value = param[key] ? param[key] : ''; callback(value); }); }