nodejs封装的webget webpost方法

Posted luoc83

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs封装的webget webpost方法相关的知识,希望对你有一定的参考价值。

在我之前的项目中,经常用到Nodejs通过post\get方法访问其它网站、webapi。下面是我封装的

Get、Post方法,很适合在一些web字符串收发场景使用(暂不支持文件、二进制流等传输)。

****************************************************************************************************

 

var util = require(‘util‘);

var http = require("http");

var querystring = require(‘querystring‘);

var iconv = require(‘iconv-lite‘);

 

//web get

exports.WebGet = function (url, callback,encode) {

    try {

        http.get(url, function (req, res) {

            var chunks = [];

            var len = 0;

 

            req.on(‘data‘, function (chunk) {

                chunks.push(chunk);

                len += chunk.length;

            });

            req.on(‘end‘, function () {

                var data = Buffer.concat(chunks, len);

 

                var html;

                if (encode != null) {

                    html = iconv.decode(data, encode);

                } else {

                    html = data.toString();

                }

 

                callback != null ? callback(html) : null;

            });

        });

    }

    catch (e) {

        callback != null ? callback(e.message) : null;

    }

}

 

//web post

exports.WebPost = function (_hostname, _port, _path,_data,callback) {

    try {

        var post_data = querystring.stringify(_data);

 

        var option = {

            hostname: _hostname,

            port: _port,

            path: _path,

            method: ‘POST‘,

            headers: {

                "Content-Type": ‘application/x-www-form-urlencoded‘,

                "Content-Length": post_data.length

            }

        };

 

        var req = http.request(option, function (res) {

                var html = "";

                res.setEncoding(‘utf8‘);

                res.on("data", function (chunk) {

                    html += chunk;

                });

 

                res.on(‘end‘, function () {

                    callback != null ? callback(html) : null;

                });

        }).on("error", function (e) {

            callback != null ? callback(e.message) : null;

        });

        req.write(post_data + "\n");

        req.end();

    }

    catch (e) {

        callback != null ? callback(e.message) : null;

    }

};

 

****************************************************************************************************

//WebGet使用实例:

_web.WebGet("http://www.xxx.com/a/b.htm", callBackFun, ‘gb2312‘);

 

//WebPost使用实例:

var data = {

    id: 1,

    msg: ‘abc‘

};

_web.WebPost("www.xxx.com", 80, "/a/SendMsg", data, callBackFun);

 

****************************************************************************************************

//注1:nodejs默认支持utf-8编码,需要进行编码转换的请安装"iconv-lite"模块:npm install iconv-lite;

//注2:WebGet没有使用http.request中的method: ‘GET‘, 而是使用 http.get。这是为了多展示一个方法,其效果是一样的;

//注3:WebPost网址参数不用加"http://",内部也没有像WebGet里一样在res.on("data")、res.on(‘end‘)里做chuank的buffer、string处理,有需要的请自行复制处理。

 

以上是关于nodejs封装的webget webpost方法的主要内容,如果未能解决你的问题,请参考以下文章

node连接mysql数据库(含方法封装)

用原生NodeJS封装一个服务器

WCF 的 WebGet 方式

没有参数或 UriTemplate 的 WebGet 失败

在 WCF REST 服务中调用 WebGet 时出错

Nodejs 处理异步(获取异步数据并处理)的方法