
freeCodeCamp 如何用 seed-daily-challenges 把每日编程挑战写入数据库【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp如果你需要给 freeCodeCamp 的数据库写入“每日编程挑战”数据仓库提供了专用脚本 seed-daily-challenges.ts。它的任务很明确从dev-playgroundsuperblock 中取出 JavaScript 和 Python 两套每日挑战校验后合并成每天一条的文档写入 MongoDB 中freecodecamp数据库的DailyCodingChallengescollection。本文按 README 给出的流程说明如何完成这次写入并确认结果。脚本的数据流在动手之前先弄清脚本做了什么后面看到日志输出时才好对照依据 seed-daily-challenges.ts 和 helpers.ts通过主 client 的 GraphQL 接口http://localhost:8000/___graphql分别拉取dev-playgroundsuperblock 下daily-coding-challenges-javascript和daily-coding-challenges-python两个 block 的挑战按challengeOrder升序排列。校验 JavaScript 与 Python 挑战数量一致且都等于EXPECTED_CHALLENGE_COUNT当前为 365。按顺序把第 i 个 JS 挑战和第 i 个 Python 挑战合并为一个文档_id取 JS 挑战的 id注释强调不能改它会被写入用户的completedDailyCodingChallenges[]日期为起始日START_DATE加 i 天标题去掉Challenge N:前缀。合并时还会校验两端标题、描述、测试数量一致不一致直接报错。用bulkWritereplaceOneupsert: true按_id替换或新建文档写完后再countDocuments核对总数。挑战源文件位于 dev-playground.json、daily-coding-challenges-javascript.json 和 daily-coding-challenges-python.json。准备条件README 列出的前置步骤是安装依赖、让主 client 以“显示 upcoming changes”的方式跑起来脚本依赖它从 GraphQL 拿数据、进入tools/daily-challenges目录。具体到配置1. MongoDB 连接串。在tools/daily-challenges/下把 sample.env 复制为.envcp sample.env .envsample.env中只有一行指向本地 MongoDB 上的freecodecamp库MONGOHQ_URLmongodb://127.0.0.1:27017/freecodecamp?directConnectiontrue脚本未设置MONGOHQ_URL时也会回退到同一个默认值但按 README 的要求仍应先建.env。2. 主 client 必须在运行且展示 upcoming changes。仓库根目录的 sample.env 中SHOW_UPCOMING_CHANGES默认是false需要让主 client 以展示 upcoming changes 的方式启动该变量设为true否则 GraphQL 查询拿不到 dev-playground 中的挑战。脚本固定请求http://localhost:8000/___graphql所以主 client 需要在本机 8000 端口提供服务。3. 依赖已安装。package.json 中的seed-daily-challenges脚本实际执行tsx seed-daily-challenges.ts运行时会用到dotenv、mongodb6.21.0、tsx等 devDependencies。脚本头部注释还要求seeding 之前先在dev-playgroundsuperblock 上跑一遍 curriculum 测试确认测试通过。执行 seeding进入目录后运行 pnpm 脚本cd tools/daily-challenges pnpm seed-daily-challenges副作用说明这条命令会向MONGOHQ_URL指向的 MongoDB 的DailyCodingChallengescollection 批量replaceOne带upsert即按_id覆盖或新增约 365 条文档。本地库可直接跑脚本注释明确指出生产环境 seeding 后不应再改动起始日期和 id操作前请确认目标库。验证写入结果脚本自己会打印阶段日志可以按顺序对照Successfully connected to mongo Fetching challenges... 365 challenges found for each language Creating new challenges... Finished creating new challenges Writing 365 challenges to database... Finished writing challenges to database第一步client.db(admin).command({ ping: 1 })成功才会打印Successfully connected to mongo这是连接成功的信号。写入完成后脚本会执行countDocuments()如果库中总数不等于 365会打印一段WARNINGExpected 365 challenges in the database, but found N documents表示 collection 中还有预期之外的文档需要自行检查。没有警告即说明总数与预期一致。常见报错与限制以下报错都在脚本中定义遇到时按提示定位Failed to find any challenges with GraphQL query. The client needs to be runningGraphQL 查询没有返回任何挑战。通常是主 client 没启动、不在localhost:8000或没有开启展示 upcoming changes脚本拿不到 dev-playground 数据。Expected 365 challenges, but found N challenges拉取到的挑战数与EXPECTED_CHALLENGE_COUNT不符同文件还注明如果 block 中挑战数量发生变化需要同步更新这个常量。Number of challenges do not match: ... JavaScript vs Python challenges found两套语言挑战数量不一致。标题/描述/测试数量不一致合并阶段会对每一对挑战校验titles do not match、descriptions do not match或do not have the same number of tests说明 JS 与 Python 两侧的课程内容已不同步。起始日期被改动脚本内置了 sanity checkSTART_DATE2025-08-11T00:00:00.000Z的 ISO 字符串若变化会直接抛出错误并提示“如果是在 seeding production发布之后不应再改起始日期”本地开发则可以修改。其他异常统一走handleError打印Oh noes!! Error seeding Daily Challenges.和错误详情关闭 Mongo 连接后以退出码 1 结束进程。完成以上流程后DailyCodingChallengescollection 中就包含了带日期、编号、双语言测试与文件内容的每日挑战文档可供 freeCodeCamp 站点的每日挑战功能读取。【免费下载链接】freeCodeCampfreeCodeCamp.orgs open-source codebase and curriculum. Learn math, programming, and computer science for free.项目地址: https://gitcode.com/GitHub_Trending/fr/freeCodeCamp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考