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

NodeJS开发Discord机器人fetch触发Unexpected identifier语法错误

问题解决方案

核心错误修复

你遇到的SyntaxError: Unexpected identifier根本原因是await关键字只能在标记为async的函数内部使用。你代码中调用Booru.search后传入then的回调函数没有标记为async,导致内部使用await直接触发语法错误,和你使用的node-fetch版本无关。
修复方法:
将代码中

.then(posts => {

修改为

.then(async posts => {

即可解决该报错。

其他需要修复的代码问题

  • 逻辑提前终止缺失:判断if (filtered.length === 0)发送完未找到结果的Embed后,没有添加return终止后续逻辑,会继续执行空数组属性访问的代码,触发报错
  • 变量未声明:embed_nsfw没有使用let/const声明,直接赋值会默认成为全局变量,存在作用域污染风险,建议改为const embed_nsfw = new Discord.MessageEmbed()
  • 属性名拼写不一致:代码中混用了filtered.fileUrl、filtered.file_url、filtered.fileURL三种写法,驼峰、下划线、大小写不统一会导致取值为undefined,触发后续逻辑错误,需要确认接口返回的正确属性名统一使用
  • 多余语法符号:字符串拼接处**Provided by:** Gelbooru.com | , +[**Booru Page**]这里有多余的逗号,会导致拼接结果异常或者语法报错,直接删除该逗号即可
  • 未定义函数:fileSizeSI函数直接调用但没有定义也没有引入,运行到对应逻辑会触发ReferenceError,需要补充该函数的实现或者引入对应依赖
  • 过滤逻辑无效:你对posts做了黑名单过滤得到filtered数组,但是后续循环遍历的还是原posts数组,过滤逻辑完全没有生效,应该改为遍历filtered数组
  • 数组属性访问错误:Booru.search返回的posts是结果数组,调用blacklist后返回的filtered也是数组,你直接访问filtered.tags、filtered.postView等属性是错误的,数组不存在这些属性,应该取数组的第一个元素filtered[0]来访问对应的属性
  • Promise未捕获异常:Booru.search的Promise链没有添加catch处理,一旦接口请求失败或者内部逻辑报错会抛出未捕获异常,直接导致机器人进程崩溃,建议在then的末尾添加.catch(err => { /* 错误处理逻辑,比如发送报错提示 */ })
  • 冗余代码:多个场景下的Embed创建逻辑重复,可以抽成公共工具函数,减少代码冗余
  • 解构变量未使用:你开头已经通过const { escapeMarkdown } = Discord.Util解构了方法,后续代码中还是全写Discord.Util.escapeMarkdown,可以直接用解构出来的escapeMarkdown简化代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:24:05