ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Vue 项目本地开发到 Nginx 部署:用 TaoToken 统一 Key 打通 VSCode 与 Node 环境配置

Vue 项目本地开发到 Nginx 部署:用 TaoToken 统一 Key 打通 VSCode 与 Node 环境配置 1. Vue 项目从本地到 Nginx为什么 Key 总是散落在各处做 Vue 项目的人大多经历过这个阶段VSCode 里装了 AI 补全插件Node 脚本里调了一次模型接口本地调试时又写死了一个 Key等到 Nginx 部署上线发现前端打包产物里还残留着不该出现的密钥。三个环境、四份配置、五处 Key改一次要翻半天。这篇要解决的就是这条链路Vue CLI 项目在 VSCode 里编码、Node 本地调试、最后 Nginx 反向代理上线全程用 TaoToken 统一管理 API Key。TaoToken 是一个聚合多家大模型能力的 API 通道你只需要申请一个 Key就能在 VSCode 插件、Node 脚本、前端请求里复用同一套凭证不用为每个工具单独开户。适合正在做 Vue 全栈开发、被多套 Key 折腾过的同学。我会给出三份可直接复制的骨架VSCode 的settings.json、Node 的.env环境变量文件、Nginx 的location反向代理配置再带你走一遍本地请求经 TaoToken 验证连通性的完整步骤。踩过的坑也会一并说清楚比如为什么前端不能直接暴露 Key、Nginx 转发时哪些请求头必须保留。2. 前置准备拿到 TaoToken Key 并理清三个环境的关系在动手改配置之前先把凭证和调用地址准备好。TaoToken 的 API 入口是https://taotoken.net/api注意这个地址不带任何查询参数是纯粹的接口根路径。你需要先注册账号然后在控制台创建一个 API Key。创建 Key 的入口在这里控制台地址https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole进去之后找到 API Keys 页面新建一个 Key复制出来先存到密码管理器里。这个 Key 就是后面 VSCode、Node、Nginx 三处共用的那一把。理一下三个环境各自扮演什么角色。VSCode 是编码环境插件通过它发起补全请求Node 是本地调试环境你的脚本、mock 服务、构建工具都可能调模型Nginx 是生产环境它负责把浏览器发来的请求转发到 TaoToken同时把 Key 藏在服务端不让它出现在前端代码里。三者的关系是VSCode 和 Node 直接用 KeyNginx 用 Key 做代理浏览器只跟 Nginx 说话。如果你还没建 Key直接去 API Keys 页面操作API Keys 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys拿到 Key 之后先别急着往代码里塞。下面按 VSCode、Node、Nginx 的顺序逐个配置。3. 可复制配置VSCode、Node、Nginx 三份骨架3.1 VSCode settings.json 配置VSCode 里很多 AI 插件支持自定义 API 端点。以常见的补全类插件为例打开命令面板输入Preferences: Open User Settings (JSON)在settings.json里加入下面这段。不同插件字段名可能略有差异核心是baseURL和apiKey两项。{ aiAssistant.baseURL: https://taotoken.net/api, aiAssistant.apiKey: sk-你的TaoToken密钥, aiAssistant.model: claude-3-5-sonnet, editor.inlineSuggest.enabled: true, editor.quickSuggestions: { other: true, comments: false, strings: true } }这里baseURL填 TaoToken 的 API 根地址插件会自动拼接/v1/chat/completions这类路径。model字段填你想用的模型名TaoToken 支持多家模型具体可用名称在文档里查。文档地址https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc如果你用的是 Claude Code 这类命令行编码工具配置方式不同走的是 Anthropic 兼容入口ClaudeCode 接入https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentClaudeCodeAnthropic3.2 Node 环境变量文件Node 侧不要硬编码 Key。在项目根目录建一个.env文件配合dotenv使用。Vue CLI 项目本身支持.env系列文件但注意以VUE_APP_开头的变量会被打包进前端产物所以模型 Key 绝对不能加这个前缀。# .env.local —— 仅本地调试用加入 .gitignore TAOTOKEN_API_BASEhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的TaoToken密钥 TAOTOKEN_MODELclaude-3-5-sonnet # 前端可读的变量才加 VUE_APP_ 前缀且只放非敏感信息 VUE_APP_API_PROXY/api然后在 Node 脚本里这样读取// scripts/ai-client.js require(dotenv).config({ path: .env.local }); const axios require(axios); const client axios.create({ baseURL: process.env.TAOTOKEN_API_BASE, headers: { Authorization: Bearer ${process.env.TAOTOKEN_API_KEY}, Content-Type: application/json }, timeout: 60000 }); async function chat(prompt) { const res await client.post(/v1/chat/completions, { model: process.env.TAOTOKEN_MODEL, messages: [{ role: user, content: prompt }] }); return res.data.choices[0].message.content; } module.exports { chat };记得把.env.local写进.gitignore别让 Key 跟着代码提交上去。3.3 Nginx 反向代理配置生产环境的关键是浏览器请求打到 NginxNginx 加上 Key 再转发给 TaoToken。这样前端代码里只有/api这样的相对路径Key 始终留在服务器。server { listen 80; server_name your-domain.com; root /var/www/vue-app/dist; index index.html; # Vue Router history 模式回退 location / { try_files $uri $uri/ /index.html; } # 反向代理到 TaoToken location /api/ { proxy_pass https://taotoken.net/api/; proxy_http_version 1.1; proxy_set_header Host taotoken.net; proxy_set_header Authorization Bearer sk-你的TaoToken密钥; proxy_set_header Content-Type application/json; proxy_set_header Connection ; # 流式响应必须关闭缓冲 proxy_buffering off; proxy_cache off; proxy_read_timeout 300s; } }几个要点。proxy_pass末尾的斜杠很关键/api/转发到https://taotoken.net/api/路径才能正确拼接。proxy_buffering off是为了支持流式输出否则前端会等整个响应结束才收到数据。proxy_read_timeout调大模型响应慢的时候不至于被 Nginx 掐断。前端调用时就用相对路径// src/api/ai.js import axios from axios; const ai axios.create({ baseURL: /api, timeout: 120000 }); export function ask(prompt) { return ai.post(/v1/chat/completions, { model: claude-3-5-sonnet, messages: [{ role: user, content: prompt }] }); }4. 验证连通性从本地请求到 Nginx 转发配置写完先别急着部署本地验证一遍。第一步用 curl 直接测 TaoToken 通道是否通curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoToken密钥 \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 回复 ok 两个字}] }返回里能看到choices数组和模型回复说明 Key 和地址都没问题。如果返回 401检查 Key 有没有复制完整返回 404检查路径是不是写成了/api/v1/...。第二步跑 Node 脚本验证环境变量读取node -e require(dotenv).config({path:.env.local}); console.log(process.env.TAOTOKEN_API_BASE)能打印出https://taotoken.net/api就说明.env.local被正确加载。第三步本地起 Vue 开发服务器在vue.config.js里配一个 devServer 代理让本地/api也走 TaoToken// vue.config.js module.exports { devServer: { proxy: { /api: { target: https://taotoken.net, changeOrigin: true, pathRewrite: { ^/api: /api }, headers: { Authorization: Bearer sk-你的TaoToken密钥 } } } } };这样本地开发时前端请求/api/v1/chat/completions会被 devServer 转发到 TaoToken行为和线上 Nginx 一致。你可以在浏览器里发一个请求看 Network 面板是否返回正常。第四步部署到服务器后用nginx -t检查配置语法nginx -s reload重载然后从外网访问你的域名确认/api路径能正常返回。如果本地通、线上不通八成是 Nginx 的proxy_set_header漏了Authorization或者proxy_pass的斜杠写错了。想快速验证模型对话是否正常可以直接用网页版对话入口测模型对话https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat5. 本篇常见错排查报错 401 UnauthorizedKey 不对或没带上。检查三处VSCode 插件的apiKey字段、Node 的.env.local、Nginx 的proxy_set_header Authorization。注意 Bearer 后面有一个空格别漏。报错 404 Not Found路径拼接错了。TaoToken 的根是https://taotoken.net/api完整接口是/api/v1/chat/completions。Nginx 里proxy_pass如果写成https://taotoken.net不带/api/转发后路径会变成/v1/...就 404 了。前端打包后 Key 泄露检查.env里有没有把 Key 写成VUE_APP_开头。只要带这个前缀Vue CLI 就会把它注入到前端代码里任何人打开浏览器都能看到。模型 Key 永远只放服务端。流式响应卡住不动Nginx 默认开启proxy_buffering会把响应攒够一块才发。加上proxy_buffering off;和proxy_cache off;就能实时输出。CORS 跨域报错如果你没走 Nginx 代理而是前端直接请求 TaoToken浏览器会拦。正确做法就是本篇的代理方案前端只请求同源的/api跨域问题自然消失。VSCode 插件不生效有些插件不读settings.json里的自定义字段而是要求你在插件自己的设置面板里填。先确认插件文档支持自定义baseURL再检查字段名是否匹配。Nginx 转发超时模型响应可能超过默认的 60 秒。把proxy_read_timeout和proxy_send_timeout都调到 300s前端 axios 的timeout也相应调大。6. 长期编码与 Agent 场景的 Key 管理如果你只是偶尔用一下上面这套配置够用了。但如果你在 Vue 项目里长期做 AI 辅助编码或者跑 Agent 类任务频繁手动换 Key、改配置会很烦。TaoToken 的 Coding Plan 就是为这种场景准备的一个订阅覆盖编码工具和 API 调用省去逐个环境配 Key 的麻烦。Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan回到工程本身我的建议是把 Key 的管理收敛到一个地方。本地开发用.env.localCI/CD 用环境变量注入生产用 Nginx 的proxy_set_header。三处引用同一个 Key但存储位置分开互不污染。这样换 Key 的时候只改三个地方而不是翻遍整个项目。最后留一个实用技巧在 Nginx 配置里把 Key 抽成变量放在nginx.conf的http块或者单独的conf.d文件里用include引入。这样主配置可以进版本库含 Key 的文件单独管理权限设成 600只有 root 能读。部署脚本里用envsubst从环境变量生成这个文件Key 就不会出现在任何提交记录里。
返回列表