mongoDB+express+React 搭建遇 DeprecationWarning:把 Codex 的 Base URL 改到 TaoToken 之后排查

发布时间:2026/9/16 2:03:03
mongoDB+express+React 搭建遇 DeprecationWarning:把 Codex 的 Base URL 改到 TaoToken 之后排查 当初我在搭一个 mongoDBexpressReact 全栈项目时后端用 express 写接口mongoose 连本地 MongoDB一跑npm start控制台就冒出(node:2896) DeprecationWarning: current URL string parser is deprecated。报错本身不算难难在我当时拿不准到底该改哪个文件也不想随手搜一句useNewUrlParser: true就糊上去。我习惯让 Codex 帮我看 routes.js但默认端点每次都要跟额度、模型切换拉扯于是先把 Codex 的 Base URL 切到 TaoToken 提供的https://taotoken.net/api让模型调用先稳定下来再回头处理 mongoose 的弃用警告。1. 先把 Codex 的 Base URL 指到 TaoToken再回头看 mongoose 告警1.1 先在本地把 express 后端骨架搭起来这一步和原项目操作一致先用全局工具生成 express 应用npm install express-generator -g express bolg-server cd bolg-server npm install npm start生成出来的目录里routes放接口路由app.js是入口bin负责启动package.json管理依赖。mongoose 连接数据库的代码原先是直接写在routes.js里的没有单独抽一层db.js。项目能跑通之后下一步就是在终端里看到那一行 DeprecationWarning。1.2 打开 TaoToken 创建 Key并写进 Codex 的 config.toml要让 Codex 稳定接管这个报错排查先打开 TaoToken 注册并创建一把 API Key这里统一记作YOUR_API_KEY。注意这把 Key 是用来请求模型接口的不是给 mongoose 用的。mongoose 连的依然是mongodb://127.0.0.1:27017/adminTaoToken 只负责让 Codex 的对话请求跑通两边互不干扰。Codex 的配置文件在~/.codex/config.toml新增一个 provider并把默认模型指过去model taotoken/模型ID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY然后在当前终端导出环境变量export TAOTOKEN_API_KEYYOUR_API_KEY模型ID先不要拍脑袋填以 TaoToken 模型广场 当时列表为准。Base URL 就写https://taotoken.net/api末尾不要加/v1不要把它和官网落地页地址混在一起。1.3 先确认 Codex 已经能正常回复配置保存后不要立刻去改 mongoose先问 Codex 一句“看一下这段 mongoose.connect 少了什么参数”如果它能正常给出分析说明 Base URL 和 Key 已经通了。如果一直转圈或者提示模型不存在不要急着怀疑 mongoose 配置先回 4.2 检查 Codex 这一层。2. DeprecationWarning 在 routes.js 里到底卡在哪2.1 完整复现一次警告先在routes.js里保持原来的连接写法const mongoose require(mongoose); const url mongodb://127.0.0.1:27017/admin; mongoose.connect(url); const db mongoose.connection; db.on(connected, () { console.log(MongoDB connected success.green); });启动后控制台除了打印连接成功还在前面多了一行(node:2896) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.注意这里 program 并没有挂掉MongoDB 照样连上了。这也是这类问题最迷惑人的地方它是个警告不是 error所以很多人会先怀疑是不是监听端口写错、认证失败、或者 mongoose 版本不对绕了一圈才发现只是少了连接选项。2.2 为什么查到了方案却不知道原因报错信息其实已经把答案写在脸上了MongoDB 驱动决定换用新的 URL parser但为了兼容老项目旧 parser 还保留着只是每次连接都提醒你“以后会删”。mongoose 底层的 MongoDB Node.js Driver 在较老版本里默认走旧逻辑于是启动时就打出这条 DeprecationWarning。打个比方地址还是同一个地址老司机按门牌号找新导航按经纬度找。官方说以后只维护新导航但你没在设置里勾选“使用新导航”于是每次出门它都提示一句。这个提示不会让你走错路但迟早会被移除到时候连接代码就不能这么写了。2.3 让 Codex 把原因和改法一起解释清楚把上面那段报错和routes.js里的连接代码一起贴给 Codex。因为我提前把 Codex 接到了 TaoToken它不需要纠结默认端点是不是可用直接就给出结论这不是地址写错也不是权限问题而是mongoose.connect(url)缺少useNewUrlParser: true。它还会解释mongoose 5.x 的文档里明确要求传入这个选项才能显式关闭旧解析器。3. 让 Codex 定位 useNewUrlParser 并改回 routes.js3.1 修改后的 mongoose.connect照 Codex 的建议最小改动是给mongoose.connect加第二个参数mongoose.connect(url, { useNewUrlParser: true });落到完整代码里就是这样const mongoose require(mongoose); const url mongodb://127.0.0.1:27017/admin; mongoose.connect(url, { useNewUrlParser: true }); const db mongoose.connection; db.on(connected, () { console.log(MongoDB connected success.green); }); db.on(error, (err) { console.error(MongoDB connected fail, err); }); db.on(disconnected, () { console.log(MongoDB connected to disconnected); });这里顺手把原文里的db.on(errror)改成了正确的db.on(error)否则监听事件拼错报错时不会走到回调里。3.2 要不要顺手把 useUnifiedTopology 也加上没有必要。这条报错只提示useNewUrlParser如果你运行的是比较老的 mongoose 5.x还会在后续遇到 Server Discovery 相关的警告那是另一条提示对应useUnifiedTopology: true。但这次先解决眼前的问题改得越少越容易确认是哪一行消除了警告。等真的出现下一条警告再让 Codex 基于当时的报错去补。不要一次性把网上搜到的四五个选项全部堆进去那样后面排查不了根因。3.3 改完后再给 Codex 复查一遍保存文件后可以把修改后的routes.js再贴回对话让 Codex 帮忙看有没有其他语法问题。它通常会提醒一点如果你之后升级到 mongoose 6.xuseNewUrlParser已经变成默认行为不加也不会再警告但在当前 lock 文件锁定的旧版本里保留这个参数是安全的。到这里修复不是“网上抄来的”而是你自己看着 Codex 的推断落在文件里的。4. 重启项目验证再回 TaoToken 控制台对一次调用4.1 观察 npm start 的输出回到项目目录重新启动cd bolg-server npm start这次控制台不再出现DeprecationWarning直接看到MongoDB connected success说明修复生效。前端部分继续用 umi ant-design-pro 的话在项目目录里跑npm start或yarn start保持 8000 端口访问即可后端修复不会影响前端启动。4.2 如果 Codex 本身还没响应按这三项查返回 401YOUR_API_KEY没有真正替换成从 TaoToken 创建出来的 Key或者 env 变量没加载到当前终端。返回 404模型ID写错回到 TaoToken 模型广场 复制当前列表里的准确 ID。连不上确认base_url写的是https://taotoken.net/api不要写成带/v1的地址也不要写成官网落地页。这三项都和 mongoose 无关是 Codex 接入 TaoToken 时要单独检查的环节。4.3 建议下一步修完这个警告后可以先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没填错顺便把这次排查 mongoose 的过程当成一次真实调用记录下来。如果接下来要继续用 Codex 写接口或调前端代码可以打开 Coding Plan 看套餐是否够用需要轮换或新建密钥时统一到 控制台 API Keys 操作。要是之后还想在 Claude Code 里用同样的方式接入环境变量的对照写法可以参考 Claude Code 接入文档。这次踩坑的完整链路其实只有三步先在~/.codex/config.toml里把 Codex 指到 TaoToken让模型调用不再被默认端点卡住再把routes.js的报错原样贴回对话让 Codex 定位到useNewUrlParser最后改一行代码并重启验证。TaoToken 从头到尾只是那个把模型请求送出去的通道mongodb 连接本身该是什么样还是什么样。以后再遇到类似的 DeprecationWarning你就能分清楚哪些是项目代码的问题哪些是 AI 工具接入的问题不用再混在一起排查了。