<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[刘新修]]></title> 
<link>http://pic1.liuxinxiu.com:80/index.php</link> 
<description><![CDATA[刘新修的个人博客 (Liuxinxiu'S Blog)]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[刘新修]]></copyright>
<item>
<link>http://pic1.liuxinxiu.com:80/node_request/</link>
<title><![CDATA[node.js post json格式数据到服务器的几种方法]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[NodeJs平台]]></category>
<pubDate>Sun, 04 Sep 2016 12:31:34 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/node_request/</guid> 
<description>
<![CDATA[ 
	<p style=" margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">json格式被越来越多的开发者说青睐,我们常常在接口定义时使用这种格式参数进行数据交换.</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">今天主要给大家从繁到简的几个node.js下使用的提交 json个数参数的方式方法.</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;"><span style="color: rgb(255, 0, 0);">下面示例中出现的参数都做了处理,拷贝代码后需要更改这些参数同时自己写一个接收json格式的api,请求成功后再返回json格式</span></p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">(一) node.js 原生自带http模块,可以解决基于http协议下的请求及回发,执行效率高,但是好多东西需要开发人员自己动手来实现,看下面代码</p><div class="codeText"><div class="codeHead">JavaScript代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="keyword">var</span><span>&nbsp;http=require(</span><span class="string">'http'</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">var</span><span>&nbsp;body&nbsp;=&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;data&quot;</span><span>:&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;channel&quot;</span><span>&nbsp;:&nbsp;</span><span class="string">&quot;aaa&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;appkey&quot;</span><span>&nbsp;:&nbsp;</span><span class="string">&quot;bbb&quot;</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;,&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;sign&quot;</span><span>&nbsp;:&nbsp;</span><span class="string">&quot;22334455&quot;</span><span>,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;token&quot;</span><span>&nbsp;:&nbsp;</span><span class="string">&quot;bb667788&quot;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&#125;;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">var</span><span>&nbsp;bodyString&nbsp;=&nbsp;JSON.stringify(body);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">var</span><span>&nbsp;headers&nbsp;=&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;<span class="string">'Content-Type'</span><span>:&nbsp;</span><span class="string">'application/json'</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;<span class="string">'Content-Length'</span><span>:&nbsp;bodyString.length&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">var</span><span>&nbsp;options&nbsp;=&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;host:&nbsp;<span class="string">'127.0.0.1'</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;port:&nbsp;3005,&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;path:&nbsp;<span class="string">'/Config'</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;method:&nbsp;<span class="string">'POST'</span><span>,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;headers:&nbsp;headers&nbsp;&nbsp;</span></li><li><span>&#125;;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">var</span><span>&nbsp;req=http.request(options,</span><span class="keyword">function</span><span>(res)&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;res.setEncoding(<span class="string">'utf-8'</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;responseString&nbsp;=&nbsp;</span><span class="string">''</span><span>;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;res.on(<span class="string">'data'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(data)&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;responseString&nbsp;+=&nbsp;data;&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;res.on(<span class="string">'end'</span><span>,&nbsp;</span><span class="keyword">function</span><span>()&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//这里接收的参数是字符串形式,需要格式化成json格式使用</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;resultObject&nbsp;=&nbsp;JSON.parse(responseString);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(<span class="string">'-----resBody-----'</span><span>,resultObject);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;);&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;req.on(<span class="string">'error'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(e)&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;TODO:&nbsp;handle&nbsp;error.</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(<span class="string">'-----error-------'</span><span>,e);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;);&nbsp;&nbsp;</span></li><li class="alt"><span>&#125;);&nbsp;&nbsp;</span></li><li><span>req.write(bodyString);&nbsp;&nbsp;</span></li><li class="alt"><span>req.end();&nbsp;&nbsp;</span></li></ol></div><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">http模块比较原始,请求参数里我们要手动指定请求头类型,头长度,请求方式,主机头和端口等.</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">当我们将json格式参数post上去以后,得到的response 对象需要我们在 data 事件上手动处理获取到的数据, end 事件表示接收数据流已结束, error 事件是当回发数据发生错误时将自动触发此事件响应函数</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">(二)</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">大名鼎鼎的 request 模块上场了,这个模块帮我们做了很多我们不关心的东西,比如请求后得到的 response 对象,我们将不会非常繁琐的去手动捕获 data ,end ,error 事件. 取而代之的是回调函数里直接将我们关心的回发数据放到了一个变量里,看下面的代码:</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;"><span style="color: rgb(255, 0, 0);">此模块并发node.js 原生自带模块,首先需要 npm install request ,下面代码的参数同样做了处理</span></p><div class="codeText"><div class="codeHead">JavaScript代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="keyword">var</span><span>&nbsp;request=require(</span><span class="string">'request'</span><span>);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">var</span><span>&nbsp;options&nbsp;=&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;headers:&nbsp;&#123;<span class="string">&quot;Connection&quot;</span><span>:&nbsp;</span><span class="string">&quot;close&quot;</span><span>&#125;,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;<span class="string">'http://127.0.0.1:3005/Config'</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;<span class="string">'POST'</span><span>,&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;json:<span class="keyword">true</span><span>,&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;body:&nbsp;&#123;data:&#123;channel&nbsp;:&nbsp;<span class="string">&quot;aaa&quot;</span><span>,appkey&nbsp;:&nbsp;</span><span class="string">&quot;bbb&quot;</span><span>&#125;,sign&nbsp;:&nbsp;</span><span class="string">&quot;ccc&quot;</span><span>,token&nbsp;:&nbsp;</span><span class="string">&quot;ddd&quot;</span><span>&#125;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">function</span><span>&nbsp;callback(error,&nbsp;response,&nbsp;data)&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(!error&nbsp;&amp;&amp;&nbsp;response.statusCode&nbsp;==&nbsp;200)&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(<span class="string">'----info------'</span><span>,data);&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;</span></li><li class="alt"><span>&#125;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>request(options,&nbsp;callback);&nbsp;&nbsp;</span></li></ol></div><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">代码明显比第一种方式少了很多,callback 里面的 data 参数就是我们请求路径后得到的内容,而且我们在 options 中指定了 json:true ,所以请求和回发的数据自动转变成了 json 对象.我们看下这次的运行结果:</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">node request.js</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">下面还有一种更简单的方法和大家分享</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">(三)</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">也是一个第三方模块,叫做 request-json</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">看名字就非常容易理解,有关json 格式参数的请求模块,使用也非常方便.</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">首先 npm install request-json &nbsp;安装此模块,定义好 json请求参数对象,见下面代码:</p><div class="codeText"><div class="codeHead">JavaScript代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>request&nbsp;=&nbsp;require(</span><span class="string">'request-json'</span><span>);&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">var</span><span>&nbsp;client&nbsp;=&nbsp;request.newClient(</span><span class="string">'http://127.0.0.1:3005/'</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="keyword">var</span><span>&nbsp;data&nbsp;=&nbsp;&#123;data:&#123;channel&nbsp;:&nbsp;</span><span class="string">&quot;aaa&quot;</span><span>,appkey&nbsp;:&nbsp;</span><span class="string">&quot;bbb&quot;</span><span>&#125;,sign&nbsp;:&nbsp;</span><span class="string">&quot;4444&quot;</span><span>,token&nbsp;:&nbsp;</span><span class="string">&quot;555&quot;</span><span>&#125;;&nbsp;&nbsp;</span></span></li><li class="alt"><span>client.post(<span class="string">'Config'</span><span>,&nbsp;data,&nbsp;</span><span class="keyword">function</span><span>(err,&nbsp;res,&nbsp;body)&nbsp;&#123;&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;console.log(res.statusCode,body);&nbsp;&nbsp;</span></li><li class="alt"><span>&#125;);&nbsp;&nbsp;</span></li></ol></div><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">返回的body 也是自动序列化成json对象,见运行结果</p><p style="margin-top: 15px; margin-bottom: 15px; color: rgb(68, 68, 68); font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; line-height: 20px;">前面的 200 是 res.statusCode 回发状态值,接着输出的是我们得到的json对象,无论从使用还是理解上,都是最简单的一种方法.</p>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/node_request/#blogcomment</link>
<title><![CDATA[[评论] node.js post json格式数据到服务器的几种方法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/node_request/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>