nodejs实现同步http模块请求。
用到http模块。
在命令行调用node命令执行,可以这样使用:
let http = require("http"); // 引入http模块
let co = require('co');
/**
* http模块发送请求
* @param host
* @param port
* @param route
* @param headers
* @param encoding 可选值: utf8 binary
*/
function sendHttpRequest(host, port, route, headers = {}, encoding = 'utf8') {
let options = {
hostname: host,
port: port,
path: '/' + route,
method: 'GET',
headers: headers
};
let data = '';
return new Promise(function (resolve, reject) {
let req = http.request(options, function(res) {
res.setEncoding(encoding);
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
resolve({result: true, data: data});
});
});
req.on('error', (e) => {
resolve({result: false, errmsg: e.message});
});
req.end();
});
}
// 请求例子
let res = co(function* () {
let req_res = yield sendHttpRequest('www.video.com', 80, '/mobile/Test/phpinfo');
console.log(req_res);
});
console.log(res);
console.log('123');
在koa框架可以这样使用:
let http = require("http"); // 引入http模块
/**
* http模块发送请求
* @param host
* @param port
* @param route
* @param headers
* @param encoding 可选值: utf8 binary
*/
function sendHttpRequest(host, port, route, headers = {}, encoding = 'utf8') {
let options = {
hostname: host,
port: port,
path: '/' + route,
method: 'GET',
headers: headers
};
let data = '';
return new Promise(function (resolve, reject) {
let req = http.request(options, function(res) {
res.setEncoding(encoding);
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function() {
resolve({result: true, data: data});
});
});
req.on('error', (e) => {
resolve({result: false, errmsg: e.message});
});
req.end();
});
}
// 请求例子
let res = yield sendHttpRequest('192.168.2.51', 80, 'user/getName?uid=1'});