博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs 发送HTTP POST请求实例
阅读量:5050 次
发布时间:2019-06-12

本文共 2773 字,大约阅读时间需要 9 分钟。

项目里面需要用到使用NodeJs来转发HTTP POST请求,研究了很久最后才弄通,把过程记录一下:

接收端代码很简单,就是回送body.address属性:

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

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

exports.sendEmail = function (req, res) {    var data = {        address: 'test@test.com',        subject: "test"    };    data = require('querystring').stringify(data);    console.log(data);    var opt = {        method: "POST",        host: "localhost",        port: 8080,        path: "/v1/sendEmail",        headers: {            "Content-Type": 'application/x-www-form-urlencoded',            "Content-Length": data.length        }    };    var req = http.request(opt, function (serverFeedback) {        if (serverFeedback.statusCode == 200) {            var body = "";            serverFeedback.on('data', function (data) { body += data; })                          .on('end', function () { res.send(200, body); });        }        else {            res.send(500, "error");        }    });    req.write(data + "\n");    req.end();}
这里浏览器回显的就是"test@test.com",注意,我把content type设置成x-www-form-urlencoded,这是bodyparser所支持的了类型之一,而body的格式通过require('querystring').stringify(...)来格式化的,这个会将对象转换成诸如"address=test%40test.com&subject=test"这种格式的字符串。

再来看另外一种content type,JSON:

exports.sendEmail = function (req, res) {    var data = {        address: 'test@test.com',        subject: "test"    };    data = JSON.stringify(data);    console.log(data);    var opt = {        method: "POST",        host: "localhost",        port: 8080,        path: "/v1/sendEmail",        headers: {            "Content-Type": 'application/json',            "Content-Length": data.length        }    };    var req = http.request(opt, function (serverFeedback) {        if (serverFeedback.statusCode == 200) {            var body = "";            serverFeedback.on('data', function (data) { body += data; })                          .on('end', function () { res.send(200, body); });        }        else {            res.send(500, "error");        }    });    req.write(data + "\n");    req.end();}
这同样能成功,但是有2个修改,一个是我用JSON.stringify()来格式化body内容,另一个是我把content type变成了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 类型。

转载于:https://www.cnblogs.com/puncha/archive/2013/06/03/3876912.html

你可能感兴趣的文章
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
asp.net core 系列 16 Web主机 IWebHostBuilder
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>