You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用数组includes结合one-liner-joke生成笑话文件代码异常

代码无法运行的核心原因

你的代码存在多处逻辑和兼容性问题,直接导致运行失败/死循环:

  • 去重判断逻辑完全写反:当前判断为数组已包含当前笑话时才追加内容,但初始数组为空,永远无法进入判断分支,直接触发死循环。
  • 循环边界错误:while (i <= amount)的判定条件会多生成1条内容,比如配置生成5条笑话时实际会循环6次。
  • 未处理目录不存在的异常:写入目标为./created_files/jokes.txt,如果本地没有created_files文件夹,文件写入方法会直接抛出路径不存在的错误。
  • 字符串替换逻辑不全:joke.body.replace(",", "")只会替换内容里的第一个逗号,无法清理所有逗号字符;最后数组转字符串时额外做的全局逗号替换属于冗余操作,是前面替换逻辑不全打的补丁。
  • 缺少环境变量兜底:如果.env文件缺失、配置项漏写,会出现接口参数为undefined、数量解析为NaN的问题,直接导致依赖调用失败、循环异常。
  • 存在冗余无效代码:开头声明的getRandomJokeWithTag、counter变量从未被调用,属于无效代码占用。
修正后可直接运行的代码
const oneLinerJoke = require("one-liner-joke");
const fs = require("fs");
const path = require("path");
// 加载.env环境变量
require("dotenv").config();

// 读取环境变量并设置兜底默认值
const jokeSubject = process.env.JOKE_SUBJECT || "general";
const jokeAmount = parseInt(process.env.JOKE_AMOUNT, 10) || 5;
const outputDir = path.join(__dirname, "created_files");
const outputFilePath = path.join(outputDir, "jokes.txt");

const jokeList = [];

// 循环收集指定数量的不重复笑话
while (jokeList.length < jokeAmount) {
    const jokeResult = oneLinerJoke.getRandomJokeWithTag(jokeSubject);
    // 清理笑话内容里的所有逗号
    const cleanJoke = jokeResult.body.replace(/,/g, "").trim();
    // 仅当笑话不在已有列表中时才追加,实现去重
    if (!jokeList.includes(cleanJoke)) {
        jokeList.push(cleanJoke);
    }
}

// 写入文件前先检查目录,不存在则递归创建
if (!fs.existsSync(outputDir)) {
    fs.mkdirSync(outputDir, { recursive: true });
}

// 用换行符拼接所有笑话写入文件
fs.writeFileSync(outputFilePath, jokeList.join("\n"));
console.log(`生成完成:共${jokeAmount}条【${jokeSubject}】主题笑话,已保存到${outputFilePath}`);
运行前置操作
  • 先在项目根目录安装所需依赖,执行命令:npm install one-liner-joke dotenv
  • 在项目根目录创建.env文件,按需配置两个参数:
    # 笑话主题,可选值参考依赖支持的标签,比如general/it/sports/food等
    JOKE_SUBJECT=it
    # 要生成的笑话数量
    JOKE_AMOUNT=10
    
  • 如果配置了依赖不支持的主题标签,会出现拿不到有效笑话、循环长时间卡住的问题,更换为支持的标签即可。

内容的提问来源于stack exchange,提问作者Bar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 01:48:34