ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vue.js+Node.js全栈开发教程:使用mongoose连接MongoDB并接入TaoToken统一API通道

Vue.js+Node.js全栈开发教程:使用mongoose连接MongoDB并接入TaoToken统一API通道 1. 从零跑通 Vue.js Node.js 全栈数据链路mongoose 连接 MongoDB 到底卡在哪很多同学学 Vue.js 和 Node.js 的时候前端页面写得挺顺一到后端接数据库就开始报错。最常见的就是 mongoose 连接 MongoDB 失败控制台要么一直转圈要么直接甩一个MongooseServerSelectionError。这个场景我太熟了因为全栈开发里数据链路是最容易断的一环前端发请求、后端收请求、mongoose 连库、库返回数据任何一步配置不对整个链路就瘫了。这篇文章要解决的就是这条链路。具体来说我会带你走完一个 Vue.js Node.js 全栈项目里 mongoose 连接 MongoDB 的完整落地过程从数据模型定义、连接串配置到接口联调最后再演示怎么把后端调用外部 AI 能力的 endpoint 和 Key 统一改到 TaoToken 这个通道上。你跟着做能拿到一份可复制的.env配置、一段能跑的 mongoose 连接代码以及一次真实的接口验证请求。先说清楚适合谁看。如果你已经会一点 Vue.js 和 Node.js能写简单的 Express 路由但对 mongoose 和 MongoDB 的连接配置总是心里没底那这篇就是给你写的。如果你还没碰过 MongoDB也没关系我会把最小可运行的部分讲清楚你照着敲就行。MongoDB 本身是一个文档型数据库数据以类似 JSON 的 BSON 格式存储最小单位是文档一组文档组成集合集合再组成数据库。mongoose 则是基于 Node.js 的 MongoDB 驱动它把 schema、model 这些概念引入进来让你在异步环境里操作数据库更顺手。全栈项目里Vue.js 负责前端展示和交互Node.js 负责接口和业务逻辑mongoose 负责把业务数据落到 MongoDB三者串起来才是一个完整的数据链路。我试过在同一个项目里同时接本地 MongoDB 和外部 AI 接口最容易出问题的不是业务代码而是配置分散数据库连接串写在一个文件AI 的 Key 写在另一个文件环境变量命名还不统一。所以这篇除了讲 mongoose 连接还会把外部 AI 调用的 endpoint 和 Key 统一收口到 TaoToken让后端配置更干净。下面从环境准备开始一步步来。2. TaoToken 前置准备统一 API 通道与 mongoose 连接 MongoDB 的环境变量管理在动手写代码之前先把两件事准备好一个是 MongoDB 服务能正常启动另一个是 TaoToken 的 API Key 拿到手。这两件事都属于「前置」但很多人会忽略环境变量的统一管理导致后面接口联调时到处找配置。先说 MongoDB。你可以在本地装一个 MongoDB 服务安装完成后需要配置数据存储目录和日志目录。比如在安装路径下新建db文件夹存数据、mongolog文件夹存日志再建一个mongo.config配置文件。启动的时候用命令指定数据目录mongod --dbpath /你的路径/db服务起来之后默认监听27017端口。如果你用的是云数据库或者 Docker连接串会不一样但格式都是mongodb://用户名:密码主机:端口/数据库名。本地开发一般不需要用户名密码直接mongodb://127.0.0.1:27017/article就行。再说 TaoToken。TaoToken 是一个统一 API 通道你可以把它理解成一个「AI 能力网关」后端不用分别去对接各家模型的 endpoint 和 Key而是统一走一个 Base URL 和一把 Key。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。你需要先去控制台创建一个 API Key控制台入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 管理页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到 Key 之后后端调用外部 AI 能力时Base URL 填https://taotoken.net/apiKey 填你创建的那把模型 ID 按你需要的填。这里有个关键点数据库连接串和 AI 通道的 Key 都属于敏感配置不要硬编码在代码里。统一放到.env文件用dotenv加载。这样本地开发、测试、生产可以切换不同的配置也不会把 Key 提交到 Git。下面这份.env你可以直接复制改# 服务端口 PORT3000 # MongoDB 连接串 MONGO_URImongodb://127.0.0.1:27017/article # TaoToken 统一 API 通道 TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的Key TAOTOKEN_MODEL你的模型ID注意TAOTOKEN_BASE_URL后面不要多加/v1之类的路径具体以接入文档为准文档地址在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果你后面要长期跑编码类任务或者 Agent可以考虑 Coding Plan入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。环境变量准备好之后项目里装两个依赖mongoose和dotenv。命令很简单npm install mongoose dotenv到这里前置就齐了MongoDB 服务在跑TaoToken 的 Key 在手.env文件写好了。接下来进入代码部分先定义数据模型再写连接逻辑。3. 可复制配置mongoose 连接 MongoDB 的 schema 定义与 .env 接入代码这一节是核心我会给出可以直接复制的代码。先定义 schema 和 model再写 mongoose 连接最后把 TaoToken 的调用封装成一个函数。整个结构建议这样分文件models/Article.js放数据模型db.js放数据库连接services/ai.js放 AI 调用app.js放 Express 接口。先看数据模型。mongoose 里一切从 schema 开始schema 定义文档的结构model 对应 MongoDB 里的集合。下面这个Article模型包含标题、内容、作者和创建时间// models/Article.js const mongoose require(mongoose); const articleSchema new mongoose.Schema({ title: { type: String, required: true, trim: true }, content: { type: String, default: }, author: { type: String, default: anonymous }, createdAt: { type: Date, default: Date.now } }); module.exports mongoose.model(Article, articleSchema);这里mongoose.model(Article, articleSchema)注册的 model 名字是Articlemongoose 会自动把它映射到 MongoDB 里名为articles的集合首字母小写并加 s。schema 支持的类型有 String、Number、Date、Buffer、Boolean、Mixed、ObjectId 和 Array够覆盖大部分业务场景。再看数据库连接。把连接逻辑单独放一个文件导出连接函数方便在启动时调用// db.js const mongoose require(mongoose); async function connectDB() { const uri process.env.MONGO_URI; if (!uri) { throw new Error(MONGO_URI 未配置请检查 .env 文件); } try { await mongoose.connect(uri, { serverSelectionTimeoutMS: 5000 }); console.log(MongoDB connect success); } catch (err) { console.error(MongoDB connect failed:, err.message); process.exit(1); } } module.exports connectDB;serverSelectionTimeoutMS设成 5000 毫秒意思是如果 5 秒内选不到可用节点就报错避免默认 30 秒一直等。连接成功后打印MongoDB connect success失败则打印错误并退出进程。接下来是 TaoToken 的调用封装。后端调用外部 AI 能力时统一用TAOTOKEN_BASE_URL和TAOTOKEN_API_KEY不要在各个业务文件里散落 Key// services/ai.js async function callAI(prompt) { const baseUrl process.env.TAOTOKEN_BASE_URL; const apiKey process.env.TAOTOKEN_API_KEY; const model process.env.TAOTOKEN_MODEL; const res await fetch(${baseUrl}/v1/chat/completions, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${apiKey} }, body: JSON.stringify({ model, messages: [{ role: user, content: prompt }] }) }); if (!res.ok) { const text await res.text(); throw new Error(AI 调用失败 ${res.status}: ${text}); } const data await res.json(); return data.choices[0].message.content; } module.exports { callAI };注意这里的baseUrl直接来自环境变量路径拼接是${baseUrl}/v1/chat/completions。如果你的接入文档里路径不同以文档为准。Key 通过Authorization: Bearer传递这是标准做法。最后把这些串到 Express 接口里// app.js require(dotenv).config(); const express require(express); const connectDB require(./db); const Article require(./models/Article); const { callAI } require(./services/ai); const app express(); app.use(express.json()); app.post(/api/articles, async (req, res) { try { const article new Article(req.body); await article.save(); res.json({ ok: true, data: article }); } catch (err) { res.status(500).json({ ok: false, message: err.message }); } }); app.get(/api/articles, async (req, res) { const list await Article.find().sort({ createdAt: -1 }); res.json({ ok: true, data: list }); }); app.post(/api/ai/summary, async (req, res) { try { const summary await callAI(请总结以下内容${req.body.content}); res.json({ ok: true, data: summary }); } catch (err) { res.status(500).json({ ok: false, message: err.message }); } }); const PORT process.env.PORT || 3000; connectDB().then(() { app.listen(PORT, () console.log(Server running on ${PORT})); });到这里可复制的配置就齐了.env管连接串和 Keydb.js管 mongoose 连接models/Article.js管数据模型services/ai.js管 TaoToken 调用app.js管接口。启动命令是node app.js前提是 MongoDB 服务已经在跑。4. 验证请求与成功结果mongoose 写入 MongoDB 并调用 TaoToken 接口联调代码写完了得验证。验证分两步先确认 mongoose 能连上 MongoDB 并写入数据再确认 TaoToken 的 AI 调用能返回结果。这两步都过了全栈数据链路才算通。先启动服务node app.js如果 MongoDB 正常控制台会输出MongoDB connect success Server running on 3000如果看到MongoDB connect failed先别急着改代码往下看第 5 节的排查。现在假设连接成功用 curl 发一个创建文章的请求curl -X POST http://localhost:3000/api/articles \ -H Content-Type: application/json \ -d {title:mongoose 连接 MongoDB 实战,content:这是一篇测试文章,author:tester}预期返回类似{ ok: true, data: { _id: 665f1a2b3c4d5e6f7a8b9c0d, title: mongoose 连接 MongoDB 实战, content: 这是一篇测试文章, author: tester, createdAt: 2025-06-05T08:00:00.000Z, __v: 0 } }看到_id和createdAt就说明数据已经写进 MongoDB 了。你可以再发一个查询请求确认curl http://localhost:3000/api/articles返回的数组里应该包含刚才那条记录。这一步验证的是 mongoose 的写入和查询链路。接着验证 TaoToken 的 AI 调用curl -X POST http://localhost:3000/api/ai/summary \ -H Content-Type: application/json \ -d {content:mongoose 是 Node.js 操作 MongoDB 的驱动提供 schema 和 model。}如果配置正确会返回类似{ ok: true, data: mongoose 是 Node.js 环境下操作 MongoDB 的驱动通过 schema 定义数据结构通过 model 操作集合。 }这一步验证的是后端到 TaoToken 的通道。如果返回ok: false看message里的状态码和错误信息。401 通常是 Key 不对404 通常是路径不对超时通常是网络或 Base URL 配置问题。前端 Vue.js 这边你可以在组件里用fetch或axios调这两个接口。比如在mounted里请求文章列表把返回的data渲染到页面上。这样前端、后端、数据库、AI 通道就串成了一条完整链路。验证通过之后建议把 curl 命令整理成一个test.http文件或者 Postman 集合方便以后回归测试。5. 本篇常见错排查mongoose 连接 MongoDB 报错与 TaoToken 401 的对照处理这一节把常见的报错列出来对照着排查。我按错误信息分类你遇到哪个查哪个。报错一MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017这个最常见意思是 mongoose 连不上 MongoDB 服务。原因通常是 MongoDB 没启动或者端口不对。先确认服务在跑mongod --dbpath /你的路径/db如果服务在跑还是报这个错检查.env里的MONGO_URI端口是不是27017主机是不是127.0.0.1。用 Docker 的话主机名可能不是127.0.0.1而是容器名。报错二MongoDB connect failed: MONGO_URI 未配置这是我在db.js里主动抛的错说明dotenv没加载到.env。检查app.js第一行是不是require(dotenv).config()以及.env文件是不是在项目根目录。dotenv默认从当前工作目录找.env如果你在子目录启动路径会不对。报错三401 Unauthorized或AI 调用失败 401这是 TaoToken 的 Key 问题。检查.env里的TAOTOKEN_API_KEY是不是完整有没有多余空格。Key 要去控制台重新复制入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。另外确认Authorization头是Bearer加 Key中间有一个空格。报错四local proxy failed或连接超时这个通常出现在网络环境受限的时候。先确认TAOTOKEN_BASE_URL是不是https://taotoken.net/api不要自己加端口或路径。如果公司网络有出口限制联系网络管理员放行。注意不要使用任何非正规的网络工具合规访问即可。报错五Cannot read properties of undefined (reading choices)这个报错说明data.choices是 undefined通常是接口返回的结构和预期不一致。先打印完整响应const data await res.json(); console.log(JSON.stringify(data, null, 2));看返回里有没有choices字段。如果没有可能是模型 ID 不对或者请求体格式不对。检查TAOTOKEN_MODEL是不是控制台里可用的模型 ID。报错六ValidationError: Article validation failed这是 mongoose 的 schema 校验失败。比如title设了required: true但请求体里没传。检查请求 JSON 里字段名和 schema 是否一致类型是否匹配。报错七OAuth相关错误如果你在别的工具里配置过 OAuth注意 TaoToken 的 API 调用用的是 API Key不是 OAuth 流程。检查是不是把 OAuth 的 token 填到了TAOTOKEN_API_KEY里。正确做法是用控制台创建的 API Key。排查的时候有个通用思路先看错误发生在哪一层。mongoose 的错看数据库服务401 看 Keychoices看响应结构ValidationError看 schema。把错误信息完整读一遍大部分问题都能定位。6. 语义一致 CTA把全栈项目的 AI 通道固定到 TaoToken到这里Vue.js Node.js 全栈项目里 mongoose 连接 MongoDB 的链路已经跑通了TaoToken 的 AI 调用也验证过了。最后说下怎么把这个配置固定下来避免以后换环境时又乱掉。核心原则就一条所有外部 AI 调用都走TAOTOKEN_BASE_URL和TAOTOKEN_API_KEY这两个环境变量业务代码里不出现硬编码的 endpoint 和 Key。这样你本地、测试、生产切换的时候只改.env就行。如果你要验证不同模型的效果可以去模型对话页面直接试入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 。如果你后面要做长期的编码任务或者 AgentCoding Plan 会更合适入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。接入文档建议收藏路径和参数以文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。API Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。控制台总入口在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。一个实用技巧把.env加进.gitignore再写一个.env.example提交到仓库里面只放变量名和示例值。这样团队协作时新人克隆下来复制一份.env.example改成.env填上自己的 Key 就能跑。mongoose 连接串和 TaoToken 的 Key 都按这个方式管理全栈项目的配置就不会再散落各处了。
返回列表