转: Nodejs 发送HTTP POST请求实例

项目里面需要用到使用NodeJs来转发HTTP POST请求,把过程记录一下:

 

  1. exports.sendEmail = function (req, res) {  
  2.     res.send(200, req.body.address);  
  3. }  


之所以能够访问body的address属性,这得益于express.js(connect)的bodyparser中间件。该中间件解析request的body,假如其content type满足某些条件的话,就尝试将其转换成javascript对象。某些条件是指:multipart, urlencoded, json。

 

好了,接下来看转发端的代码,为了简单起见,我直接将hard-coding的数据进行转发:

 

 1 /**

 2  * nodejs向apache发送请求,接收响应后返回到浏览器端

 3  */

 4 app.get('/nodeReq', function(req,res,next){

 5     var data = {

 6         age: 20,

 7         name: "cici",

 8         like: "shopping"

 9     };

10     data = require('querystring').stringify(data); //数据以url param格式发送

11     data = JSON.stringify(data); //数据以json格式发送

12     console.log(data);

13     var opt = {

14         method: "POST",

15         host: "localhost",

16         port: 8012,

17         path: "/php/get_data.php",

18         headers:{

19             //"Content-Type": "application/x-www-form-urlencoded", //for url parameter

20             "Content-Type": "application/json", // for json data

21             "Content-Length": data.length

22         }

23     };

24 

25     var req = http.request(opt, function(apacheRes){//建立连接 和 响应回调

26         if(apacheRes.statusCode == 200){

27             apacheRes.setEncoding('utf8');

28             var body = "";

29             apacheRes.on('data', function(recData){ body += recData;});

30             apacheRes.on('end', function(){ res.send(body); /*发送收到的响应*/ });

31         }else{

32             res.send(500, "error");

33         }

34     });

35     req.write(data + "\n"); //发送请求

36     req.end(); //请求发送完毕

37 });

 

注意,我把content type设置成x-www-form-urlencoded,这是bodyparser所支持的了类型之一,而body的格式通过require('querystring').stringify(...)来格式化的,这个会将对象转换成诸如"address=test%40test.com&subject=test"这种格式的字符串。

另一个是用JSON.stringify()来格式化body内容,然后把content-type改为application/json格式,当然,这个也是body parser所支持的格式之一!

 另外,有两个地方,我不是很清楚,一个是貌似content-length不是必须的,另一个是req.write(data+"\n")的"\n"也不是必须的,这个有待研究。。。

 补充:

bodyparser的代码在”\node_modules\express\node_modules\connect\lib\middleware\bodyParser.js“,它其实什么都没做,只是把解析body的任务派发给了另外3个中间件:./multipart, ./urlencoded, ./json:

 

    • ./multipart 负责 application/x-www-form-urlencoded 类型。
    • ./urlencoded 负责 multipart/form-data 类型。
    • ./json 负责 application/json 类型。

你可能感兴趣的:(nodejs)