request.js 1.3 KB
//const baseUrl = 'https://app.ydniu.com/graphql'
//const baseUrl = '/test_graphql'
const baseUrl = '/graphql'


function request(options = {}) {
	let header = Object.assign({
		"Accept": "application/json"
	}, options.header)

	return new Promise((resolve, reject) => {
		uni.request({
			url: baseUrl + (options.url || ''),
			method: options.type || 'GET',
			data: options.data || {},
			header
		}).then(data => {
			let [err, res] = data;
			res && res.data
			resolve(res);
		}).catch(error => {
			reject(error)
		})
	});
}

function get(options = {}) {
	options.type = 'GET';
	return request(options)
}

function post(options = {}) {
	options.type = 'POST';
	return request(options)
}

async function graphql(options = {}) {
	let opts = Object.assign({
		type: 'query'
	}, options)

	var body = []
	body.push(`${opts.type}{${opts.name}`)
	if (opts.args) body.push(`(${opts.args})`)
	if (opts.body) body.push(`{${opts.body}}`)
	body.push('}')

	let res = await post({
		data: {
			query: body.join('')
		}
	})

	res = res.data.data[opts.name]

	if (res.Error == '未登录') {
		uni.navigateTo({
			url: `/login?from=${encodeURIComponent(getCurrentPages()[0].__page__.fullPath)}`
		})
		return
	}

	return res
}

uni.$u.request = {
	request,
	get,
	post,
	graphql
}