<form method="POST" action="/profile">
<input name="name" type="text"><br/>
<input name="password" type="password"><br/>
<input type="submit">
</form>
我正在尝试使用此表单向node.js文件发送POST请求 为了处理请求,我在创建服务器后执行了以下操作:
if (request.method === 'POST') {
var data = '', dataFull;
request.on('data', function (chunk) {
data += chunk;
}).on('end', function () {
dataFull = queryString.parse(data);
});
console.log(dataFull);
}
但是控制台只记录undefined而不是记录对象。 并尝试记录数据变量,但它没有记录任何内容
任何人都可以解释原因吗?
答案 0 :(得分:1)
这是因为当您到达dataFull
语句时,console.log(dataFull)
变量未填充。您在data
和end
上绑定的回调是异步的,只有在发生受尊重的事件时才会触发。结帐this link以了解有关异步回调的更多信息(以及更多信息)
就代码而言,你可以做这样的事情,
if (request.method === 'POST') {
let data = '';
request.on('data', function (chunk) {
data += chunk;
// Too much POST data, kill the connection!
// someone can kill node by uploading an endless file!
// 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
if(data.length > 1e6){
request.connection.destroy();
}
}).on('end', function () {
let dataFull = queryString.parse(data);
console.log(dataFull);
//- now you can access the fields as dataFull['name'] etc.
//- maybe call a callback or resolve a promise here
//- cb(null, dataFull) or resolve(dataFull)
});
}
的身体核对示例