UNPKG

yao-node-client

Version:

A node client for yao application development

216 lines 8.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.http = void 0; const request_1 = __importDefault(require("./request")); /** * 使用 http 对象发送 HTTP 请求,参数表与返回值与 http.* 处理器一致 * 虽然可以直接使用fetch,但是在参数与文件处理上比较麻烦 */ exports.http = { /** * YAO Http Post 代理 * http.Post [<URL>, <Payload (可选)>, <Files (可选)>, <Query(可选)>, <Headers (可选)>] 响应结果 发送 HTTP POST 请求 示例 文档 * @param {string} URL 目标网址 * @param {object} Payload 请求数据, 示例: {"name":"Pet"}, http.Post 发送时候自动添加 Content-type: application/json; charset=utf-8 Header * @param {object} Files 上传文件, 示例: {"file":"/path/root/file"}, 文件路径为相对路径 相对地址, 示例: /text/foo.txt, 绝对路径为: /data/app/data/text/foo.txt。 如 Files 不为 null,自动添加 Content-type: multipart/form-data Header * @param {object} Query Query 参数, 示例: {"foo":"bar", "arr[]":"hello,world"}, 对应 Query string: foo=bar&arr[]=hello&arr[]=world * @param {HttpHeaders} Headers 请求 Header, 示例: {"Secret":"********"} 或 [{"Secret":"********"}, {"Secret":"#####"}] * @returns */ Post: function (URL, Payload, Files, Query, Headers) { const payload = { type: "Http", method: "Post", args: [URL, Payload, Files, Query, Headers], }; return (0, request_1.default)(payload); }, /** * YAO Http Get 代理 * http.Get [<URL>, <Query (可选)>, <Headers (可选)>] 响应结果 发送 HTTP GET 请求 示例 文档 * @param {string} URL 请求数据 * @param {object} Query Query 参数 * @param {object} Headers 请求 Header * @returns */ Get: function (URL, Query, Headers) { const payload = { type: "Http", method: "Get", args: [URL, Query, Headers], }; return (0, request_1.default)(payload); }, /** * YAO Http Head 代理 * * http.Head [<URL>, <Payload (可选)>, <Query (可选)>, <Headers (可选)>] 响应结果 发送 HTTP HEAD 请求 示例 文档 * @param {string} URL 目标网址 * @param {object} Payload 请求数据 * @param {object} Files 上传文件 * @param {object} Query Query 参数 * @param {object} Headers 请求 Header * @returns */ Head: function (URL, Payload, Files, Query, Headers) { const payload = { type: "Http", method: "Head", args: [URL, Payload, Files, Query, Headers], }; return (0, request_1.default)(payload); }, /** * YAO Http Put 代理 * * http.Put [<URL>, <Payload (可选)>, <Query(可选)>, <Headers (可选)>] 响应结果 发送 HTTP PUT 请求 示例 文档 * @param {string} URL 目标网址 * @param {object} Payload 请求数据 * @param {object} Files 上传文件 * @param {object} Query Query 参数 * @param {HttpHeaders} Headers 请求 Header * @returns */ Put: function (URL, Payload, Files, Query, Headers) { const payload = { type: "Http", method: "Put", args: [URL, Payload, Files, Query, Headers], }; return (0, request_1.default)(payload); }, /** * YAO Http Patch Put 代理 * * http.Patch [<URL>, <Payload (可选)>, <Query(可选)>, <Headers (可选)>] 响应结果 发送 HTTP PATCH 请求 示例 文档 * @param {string} URL 目标网址 * @param {object} Payload 请求数据 * @param {object} Files 上传文件 * @param {object} Query Query 参数 * @param {HttpHeaders} Headers 请求 Header * @returns */ Patch: function (URL, Payload, Files, Query, Headers) { const payload = { type: "Http", method: "Patch", args: [URL, Payload, Files, Query, Headers], }; return (0, request_1.default)(payload); }, /** * YAO Http Delete 代理 * * http.Delete [<URL>, <Payload (可选)>, <Query(可选)>, <Headers (可选)>] 响应结果 发送 HTTP DELETE 请求 示例 文档 * @param {string} URL 目标网址 * @param {object} Payload 请求数据 * @param {object} Files 上传文件 * @param {object} Query Query 参数 * @param {HttpHeaders} Headers 请求 Header * @returns */ Delete: function (URL, Payload, Files, Query, Headers) { const payload = { type: "Http", method: "Delete", args: [URL, Payload, Files, Query, Headers], }; return (0, request_1.default)(payload); }, /** * YAO Http Send 代理 * * http.Send [<METHOD>, <URL>, <Query (可选)>, <Payload (可选)>, <Headers (可选)>] 响应结果 发送 HTTP POST 请求, 返回 JSON 数据 示例 文档 * @param {string} URL 目标网址 * @param {object} Payload 请求数据 * @param {object} Files 上传文件 * @param {object} Query Query 参数 * @param {HttpHeaders} Headers 请求 Header * @returns */ Send: function (METHOD, URL, Payload, Files, Query, Headers) { const payload = { type: "Http", method: "Send", args: [METHOD, URL, Payload, Files, Query, Headers], }; return (0, request_1.default)(payload); }, /** * http.Stream * args[0] Method GET/POST/PUT/PATCH/DELETE/... * args[1] URL * args[2] Handler procsss name * args[3] Payload <Optional> "Foo", {"foo":"bar"}, ["foo", "bar", {"k1":"v1"}], "/root/path" * args[4] Query Params <Optional> {"k1":"v1", "k2":"v2"}, ["k1=v1","k1"="v11","k2"="v2"], [{"k1":"v1"},{"k1":"v11"},{"k2":"v2"}], k1=v1&k1=v11&k2=k2 * args[5] Headers <Optional> {"K1":"V1","K2":"V2"} [{"K1":"V1"},{"K1":"V11"},{"K2":"V2"}] * @param METHOD HTTP 调用方法 * @param URL http url地址 * @param Callback 回调函数 * @param Payload 请求内容 * @param Query 查询参数对象 * @param Headers 请求头 * @returns normal return 1 exception return -1 break return 0 */ Stream: function (METHOD, URL, Callback, Payload, Query, Headers) { let url = URL; if (Query) { //todo 需要优化 if (typeof Query === "object") { const params = new URLSearchParams(); let query = Query; for (const key in query) { params.append(key, query[key]); } const queryString = params.toString(); // "name=John&age=30&city=New%20York" if (url.includes("?")) { url = url + "&" + queryString; } else { url = url + "?" + queryString; } } } fetch(url, { headers: Headers, method: METHOD, body: JSON.stringify({ ...Payload, stream: true }), }) .then((response) => { const reader = response.body?.getReader(); function readStream() { if (reader) { reader .read() .then(({ value, done }) => { if (!done) { const data = new TextDecoder().decode(value); Callback?.(data); return readStream(); } else { // eslint-disable-next-line no-console console.trace("http stream api called done"); return 1; } }) .catch((error) => { console.log(error); return -1; }); } return 1; } return readStream(); }) .catch((error) => { console.log(error); return -1; }); return 1; }, }; //# sourceMappingURL=http.js.map