刚学nodejs,做到一个例子:发送简单的HTTP请求。遇到一个问题,客户端给服务端发送的消息到服务端,服务端收不到消息,确切的说是“”。
以下是服务端代码:server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
const http = require( "http" ); const qs = require( "querystring" ) http.createServer( function (request,response){ var body = "" ; request.on( "data" , function (chunk){ body+=chunk; }) request.on( "end" , function (){ response.writeHead(200,{ "ContentType" : "text/html;charset=utf-8" }); console.log(body) process.stdout.write( "got name :" + qs.parse(body)[ "name" ]+ "\n" ) }) }).listen(3000); |
以下是客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
var http = require( "http" ); var qs = require( "querystring" ) var options = { hostname: '127.0.0.1' , port: 3000, path: '/' , method: 'POST' , }; function getname(theName){ var b = {name:theName}; var a=qs.stringify(b) console.log( typeof theName) console.log( "theName:" +theName+ " ,b转换为string后的a:" +a); http.request(options, function (response){ response.setEncoding( 'utf8' ); var body = "" ; response.on( 'data' , function (chunk){ body+=chunk; }); response.on( 'end' , function (){ process.stdout.write( "client compate!\n" ); }) }).end(a);} //正确代码 process.stdin.on( "data" , function (inputData){ process.stdout.write( "your name:" +inputData); console.log( "输入内容: " +inputData+ " 转换为string后:" +inputData.toString().replace( "\r\n" , "" )) //inputData 有回车 getname(inputData.toString().replace( "\r\n" , "" )); }) |
1
2
3
4
|
//错误代码<br>process.stdin.on("data",function(inputData){ process.stdout.write( "your name:" +inputData); getname(inputData); }) |
服务端,在这里无需多说。我们看到客户端的错误代码:这里,没有对接收到的“用户输入数据”的inputData处理,所以这里的inputData是Object类型;
看到客户端反馈结果:
服务端的返回结果:
相继查看了b的类型:
相信这里已经知道了问题的根源:获得的参数是一个buffer类型的,导致后面解析出问题。那么在调用getname的时候把参数转换好就行了。这个逻辑应该可行。
但是在这里我就有一个疑问,这个接收到的输入的对象该怎么转换呢?
querystring:其中nodejs中有一个模块,querystring,作用是对URL的查询字符串进行解析;有stringify() 和parse()两个方法,一个是转字符串,一个是解析为对象;
JSON处理JSON字符串的;JSON.stringify()可以解析为string;
toString()方法:都可以解析为string
这里我们采用的是inputData.toString().这里只是传递参数,也不是跟URL相关,自然用这个。好了问题解决!