nodejs模仿ajax请求

'use strict'
const fs = require("fs");
const http = require("http");
var Url = require("url");
var querystring = require('querystring');

var defaultSetting = {
	url:null,	//request url
	data:null,	//parameters
	dataType:"JSON",	//JSON | string
	headers: {},	//Content-Type ...
	statusCode:{},	//500 | 404 | 200
	type:"GET",	// GET | POST
	timeout:10,	//request timeout threshold
	beforeSend: function (req) {},	//bofore send request
    complete: function (req) {},	//requset completely
	success: function (data) {console.log(data)},	//request successfully
	error:function(data){}	//request failed
}

function ajax(setting){
	var errCode = null;
	var settingType = {}.toString.call(setting).slice(8,-1);	//is similar to "Object.prototype.toString.cal(setting).slice(8,-1)"
	if(settingType != "Object"){
		console.log("the ajax's first argument must be a Object");
		return;
	}
	if(setting.url == null || setting.url == ""){
		console.log("the url cannot be null");
		return;
	}
	
	for (var key in defaultSetting) {
		if (setting[key] == null) {
			setting[key] = defaultSetting[key];
		}
	}
	var params = Url.parse(setting.url, true);
	var options = {
		host: params.hostname,
		port: params.port || 80,
		path: params.path,
		method: setting.type
	};
	
	if(setting.data != null){
		options.path += "?";
		for (var key in setting.data) {
            options.path = options.path + "&" + key + "=" + setting.data[key];
        }
	}
	
	var req = http.request(options,function(res){
		var data = "";
		res.on("data",function(chunk){
			data += chunk;
		})
		res.on("end",function(){
			setting.success(data);
			setting.complete(data);
		})
	}).on("error",function(e){
		setting.error(e)
	})
	
	if (setting.type === "POST") {
        var dataStr = querystring.stringify(setting.data);
        req.setHeader("Content-Length", dataStr.length);
		if(setting.headers != null){
			for(var key in setting.headers){
				req.setHeader(key,setting.headers[key]);
			}
		}
        req.write(dataStr);
    }
    req.setTimeout(setting.timeout);
    req.end();
}

module.exports = {ajax:ajax};

/**
* for instance
* ajax({url:"http://127.0.0.1:3030",type:"POST",data:{},success:function(data){},error:function(err){}})
*/


不太完善,有兴趣的朋友可以继续完善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逛街的猫啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值