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

使用module.exports拆分discord.js机器人代码时出现execute属性读取错误

问题原因

你在message.js中对commandinit.js的导出内容使用了错误的解构赋值。commandinit.js通过module.exports直接导出的是一个包含name、execute属性的对象,并没有对外暴露名为commandinit的属性,因此解构得到的commandinit变量为undefined,调用undefined.execute自然会抛出你遇到的类型错误。

解决方案

方案1(更推荐,修改导入逻辑)

直接将commandinit.js导出的整个对象赋值给变量,不需要解构,修改message.js中的导入代码即可:

// 原来的错误写法
const{ commandinit } = require(`./commandinit.js`);
// 替换为正确写法
const commandinit = require(`./commandinit.js`);

修改后后续的commandinit.execute()调用即可正常运行。

方案2(保留解构写法,修改导出逻辑)

如果你希望保留解构的导入写法,可以修改commandinit.js的导出结构,将功能对象挂载到commandinit属性下:

// commandinit.js 修改后的导出代码
module.exports = {
  commandinit: {
    name: 'commandinit',
    execute(client, message, command){
        // 原有逻辑
    }
  }
};
额外优化建议
  1. 修正命令触发的判断逻辑:你当前写的if(message.content.startsWith("-") || !message.author.bot)使用了或运算符||,会导致所有普通用户发送的非命令消息也进入命令处理流程,应该改为与运算符&&,仅处理普通用户发送的带-前缀的消息:
if(message.content.startsWith("-") && !message.author.bot)
  1. 建议将require导入语句统一放在文件顶部,不要写在execute函数内部:Node.js的模块加载是同步操作,写在函数内部会每次调用函数都触发一次加载逻辑(虽然有模块缓存不会重复加载,但不符合常规编码规范,可读性也更差)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:15:02