《NodeJS开发教程11-Http与Https使用》

使用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();//发送请求

你可能感兴趣的:(《NodeJS开发教程11-Http与Https使用》)