使用nodejs不仅可以开发http、https服务器,而且还可以开发具有访问网络能力的客户端,下面我贴出具体实现步骤。
Http的使用
- http服务器
/*http & https*/
var http=require("http");
var https=require("https");
var url=require("url");
var fs=require("fs");
var querystring=require("querystring");
//http-server端
var server=http.createServer(function(req,res)
{
//获取请求的pathname
var pathname=url.parse(req.url).pathname;
console.log("pathname:"+pathname);
var body="";//post正文内容体
req.on("data",function(chunk)//监听读取数据事件
{
body+=chunk;
});
req.on("end",function()
{
res.writeHead(200,{"Content-Type":"text/plain"});//写入head参数
if(req.method=="GET")
{
//查询参数(获取到客户端请求的参数)
var query=querystring.parse(url.parse(req.url).query);
console.log("query:%j",query);
res.end("hello-server-get");
}else if(req.method=="POST")
{
//查询参数(获取到客户端请求的参数)
var query=querystring.parse(body);
console.log("query:%j",query);
res.end("hello-server-post");
}
});
});
server.listen(1336,"localhost");
console.log("服务器启动监听localhost:1336");
创建http服务器,并处理 GET和POST请求,拿到请求的路径和参数,返回结果到客户端。
- http客户端
var http=require("http");
var https=require("https");
var fs=require("fs");
var querystring=require("querystring");
var options={
hostname:"localhost",
port:1336,
path:"/info/child?abc=123&name=China",
// method:"GET"
method:"POST"
};
//post内容
var contents=querystring.stringify({
name:"中国",
abc:123,
});
//构造http请求(客户端)
var req=http.request(options,function(res)
{
console.log("STATUS:"+res.statusCode);//服务器返回的状态码
console.log("HEADERS:%j",res.headers);//服务器返回的响应头参数
res.setEncoding("utf8");
res.on("data",function(chunk)//服务器返回的数据
{
console.log("response:"+chunk);
});
});
req.write(contents);//post发送数据
req.end();//发送请求
Https使用
https服务器的创建,首先需要用到两个文件(用于前后端数据传输时的加密):
"certificate.pem" //证书文件
"privatekey.pem" //私钥文件
-
秘钥和证书文件生成【如果你已经有证书则可以跳过此步骤】
打开你的终端,【要确保安装了openssl,安装教程百度一下吧】依次执行以下三条命令,最终会生成三个文件,分别是:
privatekey.pem
certrequest.csr
certificate.pem
/**
* ssl证书生成
* 1.执行 openssl genrsa -out privatekey.pem 1024 【生成privatekey.pem私钥】
* 2.执行 openssl req -new -key privatekey.pem -out certrequest.csr 【生成certrequest.csr签名】
* 3.执行 openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem 【生成certificate.pem签名证书】
*/
-
https服务器
有了我们需要的
"certificate.pem" //证书文件
"privatekey.pem" //私钥文件
我们就可以创建并启动一个https服务器了:
var http=require("http");
var https=require("https");
var url=require("url");
var fs=require("fs");
var querystring=require("querystring");
var options={
key: fs.readFileSync('./privatekey.pem'),
cert: fs.readFileSync('./certificate.pem'),
passphrase:"****"//你的密码
};
var server=https.createServer(options,function(req,res)
{
var pathname=url.parse(req.url).pathname;
console.log("pathname:"+pathname);
res.writeHead(200,{"Content-Type":"text/plain"});
res.end("hello-server");
});
server.listen(443,"localhost");
console.log("服务器监听localhost:443");
-
https客户端
【注意】以下代码会报 "Error: self signed certificate"错误,应该证书是我们自己签发的,是证书校验失败导致(如果自签名证书没问题可以喷我)正常情况下 我们发布版本需要到权威的SSL/TLS证书签发机构进行签发。
不过 你可以通过浏览器去验证一下你的https服务器是否正常启动并运行。
https://localhost:443/
var options={
hostname:"localhost",
port:443,
path:"/info?abc=123&name=China",
method:"GET"
};
options.agent = new https.Agent(options);
//构造https请求(客户端)【自签名证书非法,应该使用正式正式】
var req=https.request(options,function(res)
{
console.log("STATUS:"+res.statusCode);
console.log("HEADERS:%j",res.headers);
res.setEncoding("utf8");
res.on("data",function(chunk)
{
console.log("response:"+chunk);
});
});
req.end();//发送请求