Nuxt3 实现接口域名动态化

为什么要做接口动态?

  • 多个域名指向同一个项目, 比如www.abc.con和abc.com都指向同一个项目, 写死前缀会出现跨域问题
  • 小公司没有运维, Nginx配置不太熟悉
  • 之前项目的接口前缀一直是通过不同的.env文件配置好的. 想实现下动态化

此时可以通过前端项目实现接口域名动态-根据网站域名来处理, 避免接口跨域

怎么实现?

1, 创建环境配置 .env.developmen和.env.production

ini 复制代码
// .env.developmen (本地开启代理使用)
NUXT_PUBLIC_API_BASE = /api
arduino 复制代码
// .env.production
NUXT_PUBLIC_API_BASE = //www.abc.com

2, 在 nuxt.config.ts 中增加配置, 将环境配置信息加入到项目运行配置中

arduino 复制代码
export default defineNuxtConfig({
  runtimeConfig: {
    public: {
      apiBase: process.env.NUXT_PUBLIC_API_BASE,
    }
  },
})

3, 创建plugins文件夹及下面的api-domain.ts

typescript 复制代码
/**
 * 接口域名 根据网站域名一致
 * 客户端获取域名, 接口请求时使用
 */
import { defineNuxtPlugin } from '#app'

export default defineNuxtPlugin((nuxtApp: any) => {
  // 客户端获取域名
	if (process.client) {
    // 获取项目运行时的配置
      const config = useRuntimeConfig()
    // 获取配置的接口前缀
      const apiBase = config.public.apiBase
    let currentDomain = ''
    // 非本地运行, 协议和域名拼接下
		if (apiBase !== '/api') {
			currentDomain = window.location.protocol + '//' + window.location.host
		} else {
      // 本地运行
      currentDomain = apiBase
    }
    // 注入到项目中
    nuxtApp.provide('apiDomain', currentDomain)
	}
})

4, 组件中使用

xml 复制代码
<script setup lang="ts">
import { useNuxtApp } from '#app';
const nuxtApp = useNuxtApp();
const apiDomain = nuxtApp.$apiDomain;


const getList = async () => {
	try {
		const response = await $fetch(
			`${apiDomain}/getList/abc/111`,
			{
				method: 'POST',
			}
		)
    console.log(response)
		
	} catch (error) {
		console.log(error)
	}
}

onMounted(() => {
	getList()
})
</script>

<template>
</template>

<style scoped>
</style>
相关推荐
饼干哥哥10 分钟前
搭建一个云端Skills系统,随时随地记录TikTok爆款
前端·后端
酉鬼女又兒38 分钟前
零基础快速入门前端Web存储(sessionStorage & localStorage)知识点详解与蓝桥杯考点应用(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·职场和发展·蓝桥杯·html
DanCheOo42 分钟前
# 从"会用 AI"到"架构 AI":高级前端的认知升级
前端·ai编程
社恐的下水道蟑螂1 小时前
前端面试必问 Git 通关指南:常用命令速查 + merge/rebase 深度辨析,看完再也不慌
前端·git·面试
None3211 小时前
NestJS 流式文件上传实践:从 Multer 到 Busboy 的进阶之路
前端·后端
海浪浪1 小时前
Symbol 产生的背景以及应用场景
前端·javascript
DROm RAPS1 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
OpenTiny社区1 小时前
GenUI SDK v1.1.0 正式发布|全端体验革新,能力与稳定性进阶
前端·ai编程
IAUTOMOBILE1 小时前
Code Marathon 项目源码解析与技术实践
java·前端·算法
Flying pigs~~1 小时前
基于Deepseek大模型API完成文本分类预测功能
java·前端·人工智能·python·langchain·deepseek