淘寶小程序開發——請求封裝

// 雲應用ID 不同商家可能有不同的店鋪。店鋪的雲應用iD不同
const APPS = {
    default: '123456'  // 默認雲應用ID 123456爲示例,非真實
};

/****
 * 如果是模板小程序需要拿到模板id和賣家openID
 */
// let extJson = my.getExtConfigSync();

// const { templateId, sellerOpenId } = extJson;

/**
 * ajax請求數據
 * 1.雲應用不需要完整域名,只需要接口訪問路徑即可。
 * 2.app:調用的雲應用類型,爲APPS內key值。
 * 3.method:雲應用僅支持 GET,POST。
 * 4.POST 請求僅支持 application/json json數據格式傳輸。
 */
export default async function ajax({
    url, app = 'default', method = 'GET',
    data = {},
    headers = {},
    params = {},
}) {

    try {
        const { cloud } = getApp(); // getApp獲取整個應用的實例
        const appId = APPS[app] || APPS.default; // 關聯的雲應用ID
        const paramsStr = Object.keys(params).map(key => `${key}=${params[key]}`).join('&');
        url = `/${url}${paramsStr ? `?${paramsStr}` : ''}`;
        /**
         * 如果是模板小程序
         *  */
        // url = `/${url}?templateId=${templateId}&sellerOpenId=${sellerOpenId}${paramsStr ? `&${paramsStr}` : ''}`;
        let options = {
            path: url, method, headers,
            exts: {
                cloudAppId: appId, // 雲應用iD
                // timeout: 5000
            },
        }
        options.headers = {
            ...options.headers,
            'Content-Type': options.method === 'POST'
                ? 'application/json'
                : 'application/x-www-form-urlencoded',
        };

        if (options.method === 'POST') {
            options.body = data;
        } else {
            options.method = 'GET';
            // options.params = data;
            const qs = Object.keys(data)
                .map(key => `${key}=${data[key]}`)
                .join('&');
            if (qs) url = `${url}&${qs}`;
            options.path = url;
        }

        // console.log('options ====> ', options)
        const result = await cloud.application.httpRequest(options);
        // console.log(result)
        return result;
    } catch (e) {
        console.info(url + ' error!', e);
        throw e;
    };
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章