UNPKG

@vectorx/cloud-toolkit

Version:

VectorX Cloud Toolkit

78 lines (77 loc) 3.43 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.request = exports.Request = void 0; const node_fetch_1 = __importDefault(require("node-fetch")); const env_helper_1 = require("./env-helper"); class Request { fetch(options) { return __awaiter(this, void 0, void 0, function* () { const { method = "GET", url, data = {}, headers = {} } = options; try { let requestUrl = url; let requestBody; const queryParams = new URLSearchParams(); if (data.query) { Object.entries(data.query).forEach(([key, value]) => { queryParams.append(key, String(value)); }); } if (method === "GET" && data.params) { Object.entries(data.params).forEach(([key, value]) => { queryParams.append(key, String(value)); }); } requestUrl = queryParams.toString() ? `${url}?${queryParams.toString()}` : url; if (method === "POST" && data.body) { requestBody = JSON.stringify(data.body); const contentTypeKey = Object.keys(headers).find((key) => key.toLowerCase() === "content-type"); if (!contentTypeKey) { headers["Content-Type"] = "application/json"; } } const hostFetch = env_helper_1.isIDE ? globalThis.fetch : node_fetch_1.default; const response = yield hostFetch(requestUrl, { method, headers, body: requestBody, timeout: 1000 * 20, }); const responseData = yield response.json(); return { status: response.status, data: responseData, headers: response.headers, }; } catch (error) { throw new Error(`请求失败 ${error.message}`); } }); } handleHttpStatus(response) { if (response.status >= 200 && response.status < 300) { return response.data; } throw new Error(`HTTP 错误: ${response.status}`); } handleCode(data) { if (data.code === 0) { return data; } throw new Error(`业务错误: ${data.msg || "未知错误"}`); } } exports.Request = Request; exports.request = new Request();