node.js GET与POST请求

node.js GET与POST请求

 
var http = require('http');
var url = require('url');

createServer();
submitByGet();
submitByPost();

function createServer() {
    http.createServer(function(req, res){
        if(req.method.toUpperCase() == 'GET') {
            res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
            res.write('submit by ' + req.method.toUpperCase() + '
');
            //url.parse后得到的是一个json对象
            res.write(JSON.stringify(url.parse(req.url))+'
');
            //虽然说url.parse后是一个json对象,但是用点号('.')取得它的值以后就是一个字符串对象了
            res.end(url.parse(req.url).query+'
');
        } else if (req.method.toUpperCase() == 'POST') {
            res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
            var postData = 'submit by ' + req.method.toUpperCase() + '
';
            //因为post方式的数据不太一样可能很庞大复杂,所以要添加监听来获取传递的数据
            req.addListener('data', function(data) {
                postData += data;
            }).addListener('end', function(data) {
                res.write(postData+'
');
                //url.parse后得到的是一个json对象
                res.end(JSON.stringify(url.parse(req.url))+'
');
            });
        } else {
            res.writeHead(404, {'Content-Type': 'text/plain;charset=utf-8'});
            res.end("{'errcode':404,'errmsg':'404 网页未找到'}
");
        }
    }).listen(8080, function(){
        console.log('listen on port 8080...');
    });
}

//因为绝大数网络请求都是get请求,所以官方单独对get请求做了个简化版
function submitByGet() {
    var urlPath = 'http://127.0.0.1:8080/index.html?' + encodeURIComponent('name=龙神&password=123456');
    http.get(urlPath, function(response){
        response.setEncoding('utf-8');
        console.log('状态码 : ' + response.statusCode);
        console.log('response.headers = ' + JSON.stringify(response.headers));
        //注意:这里如果不赋空值的话,undefined会被转为string添加进去
        var receivedData = '';
        response.on('data', function(chunk) {
            receivedData += chunk;
        }).on('end', function() {
            //默认获取的数据是经过encodeURL之后的数据,需要使用decode解码
            console.log('receivedRawData : ' + receivedData);
            console.log('receivedDecodeData : ' + decodeURIComponent(receivedData));
        });
    }).on('error', function(e){
        console.error(e.message);
    });
}

function submitByPost() {
    //以键值对的形式构造的变量默认情况下都是一个对象
    var sendData = {'name':'chy龙神', 'password':'123456'};
    var postData = encodeURIComponent(JSON.stringify(sendData));
    //只有post时,才需要Content-Length
    var req = http.request({port:'8080', path:'http://localhost:8080/index.html', method:'POST', headers:{'Content-Type':'application/x-www-form-urlencoded'}, 'Content-Length': postData.length}, function(response){
        response.setEncoding('UTF8');
        console.log('状态码 : ' + response.statusCode);
        console.log('response.headers = ' + JSON.stringify(response.headers));
        //注意:这里如果不赋空值的话,undefined会被转为string添加进去
        var receivedData = '';
        response.on('data', function(chunk) {
            receivedData += chunk;
        }).on('end', function(){
            //默认获取的数据是经过encodeURL之后的数据,需要使用decode解码
            console.log('receivedRawData : ' + receivedData);
            console.log('receivedDecodeData : ' + decodeURIComponent(receivedData));
        });
    }).on('error', function(e){
        console.error(e.message);

    });
    //write仅对post方法有效
    req.write(postData);
    //end方法可以和request方法连写,但是write不可以
    req.end();
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>get-post-demo</title>
</head>
<body>
<form method="get" action="http://127.0.0.1:8080" >
    <input name="name" type="text" value="freddon" />
    <input name="password" type="password" value="123456"/>
    <input type="submit" value="submit by GET" />
</form>
<form method="post" action="http://127.0.0.1:8080" >
    <input name="name" type="text" value="freddon" />
    <input name="password" type="password" value="123456"/>
    <input type="submit" value="submit by POST" />
</form>
</body>
</html>
原文地址:https://www.cnblogs.com/it-tsz/p/12032901.html