Node学习笔记

向服务器发送数据

服务器端处理表单

var qs=require('querystring');
require('http').createServer(function(req,res){
    var body='';
    req.on('data',function(chunk){
        body+=chunk;
    });
    req.on('end',function(){
        res.writeHead(200);
        res.end('Done');
        console.log('
 got name 33[90m'+qs.parse(body).name+'33[39m
');
    }); 
}).listen(3000);

小tip:Node提供了querystring模块,可以方便对URL字符串进行解析,将一个字符串解析成一个对象,这样可以像处理头部信息对其进行处理

客户端对应的处理

var http=require('http'),qs=require('querystring')
function send(theName){
    http.request({
    host:'127.0.0.1'
    ,port:3000
    ,url:'/'
    ,method:'POST'
},function(res){
    res.on('data'function(){});
    res.setEncoding('utf8');
    res.on('end',function(){
        console.log('
 33[90m request complete!33[39m');
        process.stdout.write('
 your name:');
    });
}).end(qs.stringify({name:theName}));
}
process.stdout.write('
 your name:');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
process.stdin.on('data',function(name){
    send(name.replace('
',''));
});

在上述代码中,数据是通过end方法发送的,和在服务器创建响应的方式一样。无须担心从服务器获取数据块的问题,当end事件减触发时,可以将完整的请求数据打印处来。

使用 http.request() 时,必须调用 req.end(),以此来向服务器表明请求结束,即使请求的主体中没有任何数据。这里请求中的数据是name。

有一个问题是,我发现要触发end事件,必须触发一个data事件(粗体部分),这样才能打印处end事件中的内容

原文地址:https://www.cnblogs.com/pengshuo/p/6668895.html