SyntaxError:“获取”的意外标识符

Posted

技术标签:

【中文标题】SyntaxError:“获取”的意外标识符【英文标题】:SyntaxError: Unexpected identifier for "fetch" 【发布时间】:2021-12-28 07:13:07 【问题描述】:

我正在使用 NodeJS 制作一个不和谐的机器人,每次我启动机器人时它都会显示这个错误:

headers = (await fetch(filtered.fileUrl,  method: 'HEAD' )).headers
                 ^^^^^
SyntaxError: Unexpected identifier

我所知道的是,fetch 需要节点获取。起初,我认为问题在于我使用的是 node-fetch@3.0.0,它不支持 const fetch = require('node-fetch'),但即使我将其降级为 node-fetch@2.6.1,这个确切的问题仍然存在。

完整代码:

const fetch = require('node-fetch')
const Booru = require('booru')
const Discord = require('discord.js')
const  escapeMarkdown  = Discord.Util
const path = require('path')
const Color = `RANDOM`;
    module.exports = 
      info: 
        name: "booru",
        description: "booru image scraper",
        cooldown: 30,
      ,
      async execute(client, message, args, Discord) 
        const tag_query = args.join(' ');

        if (!message.content.includes('help')) 
          if (!message.content.includes('something')) 
            const hornyEmbed = new Discord.MessageEmbed()
              .setTitle('embed cut to preserve space')
            if (!message.channel.nsfw) return message.channel.send(hornyEmbed)

            Booru.search('gelbooru', tag_query, 
                limit: 1,
                random: true
              )
              .then(posts => 
                const filtered = posts.blacklist(['blacklist, of course.'])
                if (filtered.length === 0) 
                  const notfoundEmbed = new Discord.MessageEmbed()
                    .setDescription("embed cut to preserve space")
                  message.channel.send(notfoundEmbed)
                

                let tags =
                  filtered.tags.join(', ').length < 50 
                  ? Discord.Util.escapeMarkdown(filtered.tags.join(', ')) 
                  : Discord.Util.escapeMarkdown(filtered.tags.join(', ').substr(0, 50)) 
                  + `... [See All](https://giraffeduck.com/api/echo/?w=$Discord.Util
                                            .escapeMarkdown(filtered.tags.join(',').replace(/(%20)/g, '_'))
                                            .replace(/([()])/g, '\\$1')
                                            .substring(0, 1200))`

                let headers
                let tooBig = false
                let imgError = false

                try 
                  headers = (await fetch(filtered.fileUrl, 
                    method: 'HEAD'
                  )).headers
                 catch (e) 
                  imgError = true
                

                if (headers) 
                  tooBig = parseInt(headers.get('content-length'), 10) / 1000000 > 10
                

                for (let post of posts) 

                  embed_nsfw = new Discord.MessageEmbed()
                    .setTitle('you horny')
                    .setColor('#FFC0CB')
                    .setAuthor('-')
                    .setDescription(`-` +
                      `**Provided by:** Gelbooru.com | `, +`[**Booru Page**]($filtered.postView) | ` +
                      `**Rating:** $filtered.rating.toUpperCase() | ` +
                      `**File:** $path.extname(filtered.file_url).toLowerCase(), $headers ? fileSizeSI(headers.get('content-length')) : '? kB'\n` +
                      `**Tags:** $tags` +
                      (!['.jpg', '.jpeg', '.png', '.gif'].includes(
                          path.extname(filtered.fileURL).toLowerCase(),
                        ) ?
                        '`The file will probably not embed.`' :
                        '') +
                      (tooBig ? '\n`The image is over 10MB and will not embed.`' : '') +
                      (imgError ? '\n`I got an error while trying to get the image.`' : ''),
                    )
                    .setImage(filtered.sampleUrl)
                  message.channel.send(embed_nsfw);
                
              )
          
          if (message.content.includes('something')) 
            const helpEmbed = new Discord.MessageEmbed()
              .setTitle('cut to preserver space')
            message.channel.send(helpEmbed)
          
        
        if (message.content.includes('help')) 
          const helpEmbed = new Discord.MessageEmbed()
            .setTitle('cut to preserver space')
          message.channel.send(helpEmbed)
        
      
    

我知道这段代码非常混乱,因为它基本上是由我找到的不同代码组合而成的科学怪人代码。因此,除了主要主题的解决方案之外,我还没有注意到另一个问题的指针也将不胜感激。

NodeJS 版本 16.13.0, NPM 版本 8.1.0, DiscordJS 版本 12.5.3, 在 Heroku 服务器上运行。

【问题讨论】:

【参考方案1】:

尝试将async 添加到.then(posts =&gt;

Booru.search('gelbooru', tag_query, 
...
  .then(async posts => 
    const filtered = posts.blacklist(['blacklist, of course.'])
    if (filtered.length === 0) 
      const notfoundEmbed = new Discord.MessageEmbed()
      .setDescription("embed cut to preserve space")
      message.channel.send(notfoundEmbed)
    
...

  try 
    headers = (await fetch(filtered.fileUrl, 
      method: 'HEAD'
    )).headers
   

【讨论】:

谢谢,这解决了当前的问题。但是,在解决此问题后会出现另一个问题。它显示了这个错误; TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined 错误可能发生在const embed_nsfw 上的.setDescription() 周围。知道我哪里出错了吗? @dimactavish 这是完整的错误消息吗?根据我的经验,The "path" argument must be of type string. 发生在您将未定义的值传递给 path 模块的函数时。所以你可以检查filtered.file_url是否有值。 感谢您的帮助,我才意识到应该是filtered.fileUrl 而不是filtered.file_url

以上是关于SyntaxError:“获取”的意外标识符的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb:SyntaxError:意外的标识符

Mongodb:SyntaxError:意外的标识符

SyntaxError:Chrome Javascript 控制台中的意外标识符

Node.js SyntaxError:设置 Forge 查看器时出现意外标识符

语法错误 - 意外标识符(带节点的 XMPP)

如何从 jest.setup.js 中的配置修复酶上的“语法错误:意外标识符”