向服务器发送数据
服务器端处理表单
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事件中的内容