Nodejs中我想看POST的所有内容应该怎么写呀? CONSOLE.LOG()不能输出来 PARSE后的内容么?
Nodejs中我想看POST的所有内容应该怎么写呀? CONSOLE.LOG()不能输出来 PARSE后的内容么?
var http = require(‘http’); var querystring = require(‘querystring’); var server = http.createServer(function(req, res) { var post = ‘’; req.on(‘data’, function(chunk) { post += chunk; }); req.on(‘end’, function() { post = querystring.parse(post); console.log(text); res.write(post.title); res.write(post.text); res.end(); }); }).listen(3000);
当然可以。根据你提供的代码片段,你的目标是在 Node.js 中处理一个 POST 请求,并将解析后的数据打印出来。你提到的 console.log()
无法输出解析后的数据是因为你在 console.log()
中使用了未定义的变量 text
。正确的做法是直接打印 post
对象。
以下是一个改进的版本,展示了如何正确地捕获、解析并打印 POST 请求的数据:
var http = require('http');
var querystring = require('querystring');
var server = http.createServer(function(req, res) {
var post = '';
// 当接收到数据时,将其添加到 post 变量中
req.on('data', function(chunk) {
post += chunk;
});
// 当请求结束时,解析数据并打印
req.on('end', function() {
post = querystring.parse(post);
// 打印解析后的 POST 数据
console.log(post);
// 向客户端返回数据
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write(post.title || '');
res.write(post.text || '');
res.end();
});
});
server.listen(3000, function() {
console.log('Server is running on port 3000');
});
解释:
- 创建 HTTP 服务器:使用
http.createServer()
创建一个新的 HTTP 服务器。 - 初始化 POST 数据缓冲区:定义一个空字符串
post
用于存储接收到的数据。 - 监听数据事件:当接收到数据时(
req.on('data')
),将其添加到post
变量中。 - 监听结束事件:当请求结束时(
req.on('end')
),调用querystring.parse()
解析接收到的 POST 数据。 - 打印解析后的数据:使用
console.log(post)
打印解析后的数据。 - 响应客户端:设置响应头并发送解析后的数据给客户端。
这样,你可以看到完整的解析后的 POST 数据,并且也可以将这些数据发送回客户端。希望这对你有所帮助!
querystring.parse是得到get的数据 得不到post的数据。
那我怎样得到POST数据呀?
1、通过formidable模块开parse一下就可以获得post上来的数据 2、直接读取request下的socket读到的数据 var first = request.socket.ondata.arguments[0],//传入socket接收的buffer对象(slowbuffer) second = request.socket.ondata.arguments[1],//buffer对象偏移量(number) thrid = request.socket.ondata.arguments[2];//长度(number) if(request.method==“POST”){ var formdata = first.slice(second,thrid).toString().split("\r\n\r\n"); var fields = querystring.parse(formdata[1]); } 这个是我使用的两种方法
多谢
res.write(post.text); 我这段写的是不是有点问题,我传进去的不是STRING 或者buffer么?
在你的代码中,有几个问题需要修正:
console.log
中的变量名应该是post
而不是text
。- 使用
querystring.parse
时,如果POST的数据是JSON格式,那么应该使用JSON.parse
。
下面是一个修正后的示例代码,展示了如何正确地处理POST请求并打印出所有内容:
const http = require('http');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
req.on('data', (chunk) => {
body += chunk.toString(); // 将Buffer转换为字符串
});
req.on('end', () => {
try {
const parsedBody = JSON.parse(body); // 假设POST数据是JSON格式
console.log(parsedBody); // 输出解析后的POST数据
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write(parsedBody.title);
res.write(parsedBody.text);
res.end();
} catch (error) {
console.error('Failed to parse POST data:', error);
res.writeHead(400, { 'Content-Type': 'text/plain' });
res.end('Bad Request');
}
});
} else {
res.writeHead(405, { 'Content-Type': 'text/plain' });
res.end('Method Not Allowed');
}
});
server.listen(3000, () => {
console.log('Server is listening on port 3000');
});
解释:
req.on('data', ...)
:当接收到数据时,将其添加到body
中。注意这里假设数据是字符串形式。req.on('end', ...)
:当请求结束时,尝试将body
解析为JSON格式,并打印出来。- 错误处理:使用
try...catch
捕获解析错误,并返回适当的HTTP状态码。 console.log
:现在应该能正确输出解析后的POST数据。
如果你确定POST数据是x-www-form-urlencoded
格式,可以继续使用querystring.parse
,但大多数现代API倾向于使用JSON格式。