从零学习node.js之搭建http服务器(二)

2020-06-17 06:06:00易采站长站整理


url.parse(request.url, true);

result:
Url {
...
query: {
username: '111113',
password: '123',
age: '122',
submit: 'submit' },
...
}

因此我们可以通过如下语句判断是否有提交数据并获取提交数据,然后再输出到中即可:


var query = url.parse( request.url, true ).query;
/*
{
username: '111113',
password: '123',
age: '122',
submit: 'submit'
}
*/

2.2 获取表单POST方式提交的数据

现在我们使用post方式来提交数据。因为POST请求一般都比较“重” (用户可能会输入大量的内容),如果用阻塞的方式来处理处理,必然会导致用户操作的阻塞。因此node将post数据拆分为很多小的数据块,然后通过data事件(表示新的小数据块到达了)和end事件传递这些小数据块(表示所有的数据都已经接收完毕)。 所以,我们的思路应该是:在data事件中获取数据块,在end事件中操作数据。


// server.js
var http = require('http'),
querystring = require('querystring');

http.createServer(function(request, response){
var html = '<html>
<head>
<meta charset=UTF-8" />
</head>
<body>
<form action="/" method="post">
<p>username : <input type="text" name="username" /></p>
<p>password : <input type="password" name="password" /></p>
<p>age : <input type="text" name="age" /></p>
<p><input type="submit" value="submit" name="submit" /></p>
</form>
</body>
</html>';

if( request.method.toLowerCase()=='post' ){
var postData = '';

request.addListener('data', function(chunk){
postData += chunk;
});

request.addListener('end', function(){
var data = querystring.parse(postData);
console.log( 'postData: '+postData );
console.log(data);

var s = '<p><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >back</a></p>'+
'<p>username:'+data.username+'</p>'+
'<p>password:'+data.password+'</p>'+
'<p>age:'+data.age+'</p>';

response.writeHead(200, {'content-type': 'text/html'});
response.write(s);
response.end();
})
}else{
response.writeHead(200, {'content-type': 'text/html'});
response.write(html);
response.end();
}
}).listen(3000);
console.log('server has started...');

这段代码与上段代码项目,主要有的几个变化是:

不再引入url模块, 改用引入

querystring