Node.js 首个应用,用 TaoToken 接入的 Codex 对照 server.js 跑通 Hello World
Node.js 首个应用写 server.js 跑 Hello World很多新手卡在最后一步node server.js 敲下去终端看着正常浏览器却拿不到输出也说不清是 Node 本身、3000 端口、http 模块还是文件保存路径的问题。这篇按「验证用量」的视角来用 TaoToken 接入的 Codex 对照 server.js 逐行核对先把本地 3000 跑通再确认模型调用是否成功。整套流程不复杂核心就三件事本地 HTTP 服务能响应、Codex 能读到你的代码、TaoToken 的 Key 和 Base URL 配对。跟着做一遍你会清楚每一步的成功信号长什么样。1. Node.js 首个应用server.js 跑出 Hello World 才算真正跑通先还原一下典型现场。你按教程执行了npm init -y在同级目录建了 server.js把http.createServer那段代码贴进去终端运行node server.js看到Server running at http://localhost:3000/然后打开浏览器输入localhost:3000页面却一直转圈或者显示「无法访问此网站」。这时候问题可能出在四个地方Node 运行时本身、3000 端口是否真的被监听、http 模块有没有正确引入、编辑器保存的文件路径是不是你运行的那个目录。还有一种更隐蔽的情况页面确实输出了 Hello World但你改了代码再刷新内容没变于是怀疑 Node 坏了。其实多半是旧进程还在跑或者你装 nodemon 之后 npm start 没生效。新手最容易把「代码写对」和「服务跑起来」当成一回事实际上它们是两条独立的验证链一条是 Node 进程链一条是 HTTP 请求链。这篇的做法是让 Codex 当你的第二双眼睛。你把 server.js 交给它让它逐行指出require(http)、res.end(Hello World!\n)、server.listen(port)各自负责什么再让它帮你判断终端日志和浏览器结果是否对得上。TaoToken 在这里提供的是模型通道它不会替你运行 server.js也不会接管 Node 进程真正让 3000 端口活起来的仍然是node server.js或npm start。所以本文的验证顺序是先把本地 Hello World 跑出来再用 Codex 对照检查代码最后看 TaoToken 的调用有没有成功消耗。顺序反了你会分不清是端口问题还是配置问题。2. TaoToken 前置给 Codex 一条可消耗的模型通道TaoToken 在本文里的定位很明确它是一个模型 API 接入点提供统一的 Base URL 和 Key让 Codex 这类编码工具能发请求、拿回复。它不替代 Node.js不替代 npm也不替代你的编辑器。你仍然需要本地装好 Node仍然要用node server.js启动服务。Codex 负责理解和检查代码TaoToken 负责让 Codex 的请求有通道可走。先打开官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册完成后进入控制台创建 API Key。Key 只显示一次或少量次数复制后先放到环境变量里不要直接写进 server.js也不要提交到 git。你可以先建一个临时目录做实验避免污染已有项目。2.1 创建 Key 并放进环境变量Linux / macOS 终端这样写export TAOTOKEN_API_KEYsk-你刚刚创建的KeyWindows PowerShell 这样写$env:TAOTOKEN_API_KEYsk-你刚刚创建的Key验证环境变量是否生效echo $TAOTOKEN_API_KEYPowerShell 用echo $env:TAOTOKEN_API_KEY能打印出以sk-开头的字符串就说明配置进去了。如果打印为空后面 Codex 报 401 基本就是这里没配对。2.2 Codex 里为什么 Base URL 填 https://taotoken.net/api在 Codex 的配置里把 Base URL 填成https://taotoken.net/api注意两点不要在后面加/v1也不要带任何 UTM 参数。很多 404 或路径错误就是多拼了一段造成的。TaoToken 的 API 入口以文档为准配置字段名按你安装的 Codex 版本对齐核心就是 base_url 和 env_key 这两项。你可以先到 API Keys 页面确认 Key 状态再对照接入文档检查字段https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite3. 可复制配置server.js、package.json 与 Codex 三件套这一段直接给可复制的文件内容。你先在空目录里执行mkdir myapp cd myapp npm init -y然后创建 server.js。3.1 server.js 完整代码// 导入 Node 内置 http 模块 const http require(http); // 优先读环境变量 PORT没有就用 3000 const port process.env.PORT || 3000; const server http.createServer((req, res) { // 响应头200 表示成功内容类型为纯文本 res.writeHead(200, { Content-Type: text/plain }); // 结束响应并输出内容 res.end(Hello World!\n); }); // 监听端口启动后打印访问地址 server.listen(port, () { console.log(Server running at http://localhost:${port}/); });这份代码里有三个核对点正好可以交给 Codex 逐行确认require(http)是否真的引入了 Node 内置模块、res.end(Hello World!\n)是否在回调里被调用、server.listen(port)的 port 是否来自环境变量或 3000。这三处任意一处写错页面都不会给你正确输出。3.2 package.json 里加 start 和 dev先安装 nodemon 作为开发依赖npm install --save-dev nodemon然后把 package.json 的 scripts 改成这样{ name: myapp, version: 1.0.0, main: server.js, scripts: { start: node server.js, dev: nodemon server.js }, devDependencies: { nodemon: ^3.0.0 } }这里我把start留给稳定运行把dev留给 nodemon 自动重启。你也可以按教程把 start 直接写成 nodemon但排障时建议先用node server.js减少一层变量。3.3 Codex 配置文件与启动命令在 Codex 的配置文件里加入 TaoToken 的 provider示例model gpt-5-codex model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY模型名换成你账号里实际可用的名字字段名按你当前 Codex 版本调整。配置完成后启动codex如果 Codex 启动后能正常对话并且你问它「逐行解释 server.js 的 req 和 res 从哪来」时能返回具体内容说明通道已经通了。4. 验证请求从终端日志到浏览器输出确认 3000 真的被打到现在进入「验证用量」的核心环节。不要只看浏览器要把终端、浏览器、Codex 三边的信号对齐。4.1 三步确认本地服务第一步启动服务node server.js期望终端输出Server running at http://localhost:3000/第二步用 curl 发一次请求比浏览器更直观curl -i http://localhost:3000/期望看到HTTP/1.1 200 OK Content-Type: text/plain Hello World!第三步打开浏览器访问http://localhost:3000/页面显示 Hello World!。如果 curl 成功而浏览器失败优先检查浏览器是不是自动跳到了 https或者开了某些扩展拦截。再测一次 nodemon 是否生效。另开一个终端运行npm run dev保存 server.js 后终端应该自动重启并再次打印 Server running。此时再 curl 一次输出不变说明自动重启链路正常。4.2 用 Codex 核对代码并看用量把 server.js 内容发给 Codex用这条提示词请逐行核对下面这段 Node.js 代码指出 require(http)、res.end 和 server.listen 的作用。 再告诉我 terminal 打印 Server running 但浏览器打不开 localhost:3000 时最可能的三个原因和对应命令。如果 Codex 返回了具体分析说明模型调用成功。接着到控制台看调用记录是否增加确认这次请求真的消耗到了 TaoToken 的通道。你也可以直接到模型对话页做一次最小验证https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite用量记录里看到调用时间、模型名和状态就算完成了本节的验证闭环。5. 本篇常见错排查Hello World 不出现与 Codex 不回应下面这张表按「现象 → 原因 → 处理」整理遇到问题直接查。现象常见原因处理命令或动作终端报 EADDRINUSE3000 端口被占用lsof -i :3000找到 PID 后结束或PORT3001 node server.js终端无任何输出文件路径不对或文件名不是 server.jspwd、ls确认目录和文件名一致浏览器显示 404请求路径不是/或服务没监听成功用curl -i http://localhost:3000/复测页面输出旧内容旧进程还在跑结束旧进程后重新node server.jsres.send is not a function原生 http 模块没有 send那是 Express 的写法改回res.end(Hello World!\n)Codex 报 401Key 没放进环境变量或写错重新echo $TAOTOKEN_API_KEY检查Codex 报 404Base URL 多加了/v1或带了参数改回https://taotoken.net/apinpm run dev 没反应nodemon 未安装或脚本名不对npm install --save-dev nodemon并检查 scripts再补充几个容易忽略的点。文件保存成 server.js.txt 是新手高频坑编辑器标题栏看不到扩展名时尤其容易发生用ls -l或资源管理器打开扩展名显示确认。require(http)写成require(https)时终端不会报错但浏览器访问 http 地址会握手失败。res.end写在回调外面时请求来了不会执行。还有改完代码不重启服务页面永远不变这不是 Node 的锅。如果 Codex 能正常对话但让它看代码时回复很泛通常是提示词太宽。把 server.js 全文贴进去再指定「只检查端口、模块引入、响应结束这三处」返回会具体很多。6. 语义一致 CTA把 server.js 检查变成长期习惯跑通 Hello World 只是起点。后面你会加路由、连数据库、拆中间件每次改动都可能引入新的端口或路径问题。比较稳的习惯是改完 server.js 先在本地curl -i一次再让 Codex 看 diff最后到控制台确认调用是否成功。排障和接入相关的入口放在这里https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你主要是验证模型能不能稳定返回先用模型对话页做小请求如果你要长期让 Codex 跟着项目做编码和 Agent 任务看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite最后留一个可执行的小练习把 server.js 里的Hello World!\n改成Hello Node!\n保存后分别用node server.js和npm run dev各跑一次观察终端是否重启、curl 输出是否变化、Codex 是否能读出这次改动。下一次改完 server.js先本地 curl 一次再让 Codex 看 diff顺序别反。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →