UNPKG

adajs

Version:

Integrated Web Framework

87 lines (85 loc) 2.9 kB
let request = require("request"); const CONTENTYPE = { json: "application/json", uri: "application/x-www-form-urlencoded" }; module.exports = function (context, ops) { let cancel = null, _request = null; let promise = new Promise((resolve, reject) => { cancel = reject; let url = ops.url; if (url.indexOf("http") !== 0) { if (url[0] === "/") { let location = context.window.location; url = location.origin + url.replace(/[\/]+/g, "/"); } else { url = context.window.location.href.replace(/[\/]+/g, "/") + "/" + url.replace(/[\/]+/g, "/"); } } let option = { uri: url, method: ops.method, headers: Object.assign(ops.headers, { "Origin": context.window.location.origin, "X-Requested-With": "XMLHttpRequest", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" }), forever: false, jar: context._cookie, timeout: ops.timeout }; if (ops.method === "get") { option.qs = ops.data; } else { if (ops.contentType !== false) { option.headers["Content-type"] = CONTENTYPE[ops.contentType] || ops.contentType; } if (ops.contentType === 'uri') { option.form = data; } else { option.json = true; option.body = ops.data; } } _request = request(option, (error, response, body) => { _request = null; if (!error) { let status = response.statusCode; if ((status >= 200 && status < 300) || status === 304 || status === 0) { resolve({ data: body, status, statusText: status, headers: response.headers, option: ops }); } else { reject({ status, headers: response.headers, option: ops, error }); } } else { reject({ status: 500, option: ops, error }); } }); _request.on("abort", () => { reject(`[ada] request abort`); }); }); return { promise, cancel: () => { if (_request) { _request.abort(); _request = null; cancel(`[ada] request abort`); } } } };