node封裝ajax
阿新 • • 發佈:2018-12-03
昨天看了一篇blog,大概知道了封裝的過程,然後自己動手寫了一下。
blog連結如下:https://blog.csdn.net/swl979623074/article/details/53302846
node原始碼的說明:https://nodejs.org/api/http.html#http_http_request_options_callback
'use strict'; let fs = require('fs'); let http = require('http'); let URL = require('url'); let querystring = require('querystring'); let defaultConfig = { url: null, // request url data: null, // request data method: 'GET', // request method GET | POST encoding: 'utf-8', // encoding-type utf-8 | gbk | ascii utf-8 is default headers: {}, // request headers timeout: 10, // request timeout threshold (seconds) successFunc: function (data) { }, //request successfully errorFunc: function (data) { }, //request failed }; function ajax(config) { if (typeof config !== 'object' || config === null || config === undefined) { console.log('params error'); return; } if (config.url === null || config.url === undefined) { console.log("url cannot be null or undefined"); return; } // update config for (let key in defaultConfig) { // dont not use '===' if (config[key] == null) { config[key] = defaultConfig[key]; } } // parse url let params = URL.parse(config.url, true); // handle path params.path += '?'; for (let key in config.data) { // encode URI component params.path += encodeURIComponent(`${key}=${config.data[key]}&`); } params.path += `$rand=${Math.random()}`; // set options let options = { host: params.host, port: params.port || 80, method: config.method, path: params.path }; let req = http.request(options, function (res) { res.setEncoding(config.encoding); let data = ''; res.on('data', function (chunk) { data += chunk; }); res.on('end', function () { // encode URI component config.successFunc(decodeURI(data)); }) }).on('error', function (e) { config.errorFunc(e); }); // POST if (config.method === 'POST') { let d = querystring.stringify(config.data); req.setHeader("content-length", Buffer.byteLength(d)); for (let key in config.headers) { req.setHeader(key, config.headers[key]); } // write data to request body req.write(d); } // req.setTimeout(config.timeout); req.end(); } exports.ajax = ajax; //test let test = require('./Ajax'); test.ajax({ url: 'http://getman.cn/echo', data: { "msg": "hello world" }, method: 'POST', headers: { "Content-Type": "application/json" }, successFunc: function (data) { console.log(data); } });
前端的道路還很長,繼續進修!