不成功的POST请求处理
<form method="POST" action="/profile"> <input name="name" type="text"><br/> <input name="password" type="password"><br/> <input type="submit"> </form>
我试图发送一个POST请求到一个node.js文件使用这个表单和处理请求我做了以下后创build服务器:
if (request.method === 'POST') { var data = '', dataFull; request.on('data', function (chunk) { data += chunk; }).on('end', function () { dataFull = queryString.parse(data); }); console.log(dataFull); }
但控制台只是logging未定义,而不是logging对象。 并尝试logging数据variables,但它没有logging
谁能解释为什么?
这是因为在达到console.log(dataFull)
语句时dataFull
variables未被填充。 你绑定data
和end
的callback是asynchronous的,只有在尊重事件发生时才会被触发。 查看这个链接了解更多关于asynchronouscallback(和更多)。
就代码而言,你可以做这样的事情,
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) }); }
PS从这个SO回答采取的身体nuking的例子,这是评论