uni-app网络框架配置(含跨域)

基于根目录创建文件

config.js

// 系统信息
export const SYSTEM_INFO = uni.getSystemInfoSync()


// 主机地址
export const HOST = '';


// api服务器
export const API_HOST = SYSTEM_INFO.uniPlatform === 'web' ? '' : HOST;


// api服务代理路径
export const API_PROXY = SYSTEM_INFO.uniPlatform === 'web' ? '/h5api' : ''

utils/common.js

import {API_HOST,API_PROXY} from "../config.js"

/**
 * 组装接口url
 */
export const packApiUrl = (url = '') => {
  if (url.slice(0, 4) === 'http') return url
  else return `${API_HOST}${API_PROXY}${url}`
}

utils/request.js

import {packApiUrl} from "./common.js"
export function request(config={}){	
	let {
		url,
		data={},
		method="GET",
		header={}
	} = config
	
	url =packApiUrl(url);	
	header['Token'] = uni.getStorageSync("userToken")
	return new Promise((resolve,reject)=>{
		uni.request({
			url,
			data,
			method,
			header,
			success:res=>{				
				if(res.data.code==0){
					resolve(res)
				}else if(res.data.code==401){
					uni.navigateTo({
						url:'/pages/index'
					})
				}else{
					uni.showToast({
						title:res.data.msg,
						icon:"none"
					})
					reject(res.data)
				}							
			},
			fail:err=>{
				reject(err)
			}
		})
	})
}

api/api.js

import { request } from '../utils/request.js'

/* POST */
export function apiLogin(){
	return request({
		url:"/login",
		method:"POST"
	})
}

/* POST传参 */
export function apiLogin(data={}){
	return request({
		url:"/login",
		method:"POST",
		data
	})
}

/* GET */
export function apiLogin(data={}){
	return request({
		url:"/login",
		method:"POST",
		data
	})
}

/* GET无参 */
export function apiLogin(){
	return request({
		url:"/login",
		
	})
}

pages/index.vue

import {  apiLogin } from '../../api/apis.js';
const data = {
    user:user.value,
    pass:pass.value
}

const LoginThred= async() =>{

	let res = await apiLogin(data).then(res=>{
        console.log('res',res)
        //执行交互
    });

}

跨域执行,非内置浏览器访问

vite.config.js

import { defineConfig } from "vite"
import uni from '@dcloudio/vite-plugin-uni'
import AutoImport from 'unplugin-auto-import/vite'
 
export default defineConfig({
    plugins: [
        uni(),        
        // 自动导入配置
        AutoImport({
            imports:[
                // 预设
                "vue",
                "uni-app"
            ]
        })
    ],
	server: {
	  host: "localhost", // 指定服务器应该监听哪个IP地址,默认:localhost
	  port: 5173,        // 指定开发服务器端口,默认:5173
	  proxy: {           // 为开发服务器配置自定义代理规则
	     // 带选项写法:http://localhost:5173/api/posts -> http://jsonplaceholder.typicode.com/posts
	    "/h5api": {
	      target: "", // 目标接口
	      changeOrigin: true,            // 是否换源
	      rewrite: (path) => path.replace(/^\/h5api/, ""),
	    }
	  }
	}
})

对于uni-app中的跨域问题,可以通过以下几种方式解决: 1. 使用代理:在uni-app配置文件vue.config.js中配置proxyTable,将请求代理到后端接口。示例代码如下: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://example.com', // 后端接口地址 changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 2. 后端设置CORS:在后端接口中设置CORS(跨域资源共享)头部信息,允许前端的跨域请求。示例代码如下(使用Node.js Express框架): ```javascript const express = require('express'); const app = express(); // 设置CORS头部信息 app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); next(); }); // 处理接口请求 app.get('/api/example', (req, res) => { // 处理业务逻辑 res.json({ message: 'Hello World' }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 3. JSONP请求:如果后端接口支持JSONP,可以使用uni-app中的jsonp插件进行跨域请求。示例代码如下: ```javascript import jsonp from 'jsonp'; // 发起JSONP请求 jsonp('http://example.com/api', { param: 'callback' }, (err, data) => { if (err) { console.error(err); } else { console.log(data); } }); ``` 以上是解决uni-app跨域问题的常见方法,选择合适的方式进行解决即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值