(hashlips_art_engine-1.1.2_patch_v5) "path" 参数必须是字符串类型。收到未定义

(hashlips_art_engine-1.1.2_patch_v5) The "path" argument must be of type string. Received undefined

我正在尝试更新 10 个 JSON 文件的一些元数据,其中一些已正确更新,而另一些则出现以下错误。

下面你可以看到 6 个文件给我错误,4 个文件正确更新。


错误:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。收到未定义

错误:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。收到未定义

错误:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。收到未定义

错误:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。收到未定义

错误:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。收到未定义

错误:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。收到未定义

5.png 上传 & 5.json 更新!

4.png 已上传 & 4.json 已更新!

1.png 上传 & 1.json 更新!

7.png 上传 & 7.json 更新!


这是我使用的 node.js 代码:

onst FormData = require('form-data');
const fetch = require('node-fetch');
const path = require("path");
const basePath = process.cwd();
const fs = require("fs");

fs.readdirSync(`${basePath}/build/images`).
forEach(file => {
  const formData = new FormData();
  const fileStream = fs.createReadStream(`${basePath}/build/images/${file}`);
  formData.append("file", fileStream);

  let url = 'https://api.nftport.xyz/v0/files';

  let options = {
    method: 'POST',
    headers: {
      Authorization: 'SecretApiCode',
    },
    body: formData
  };

  fetch(url, options)
    .then(res => res.json())
    .then((json) => {
      const fileName = path.parse(json.file_name).name;
      let rawdata = fs.readFileSync(`${basePath}/build/json/${fileName}.json`);
      let metaData = JSON.parse(rawdata);

      metaData.file_url = json.ipfs_url;

      fs.writeFileSync(`${basePath}/build/json/${fileName}.json`,
        JSON.stringify(metaData, null, 2));

      console.log(`${json.file_name} uploaded & ${fileName}.json updated!`);
      })
    .catch(err => console.error('error:' + err));

});

我有 10 个 png 文件:

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png

还有 10 个 JSON 个文件

1.json 2.json 3.json 4.json 5.json 6.json 7.json 8.json 9.json 10.json

您代码中的 问题 似乎与获取 URL.

有关

事实证明,有时您的代码会因错误而失败,有时却能成功运行。

可能发生的情况是,有时,当您从 URL 获取数据时,它可能没有 file_name 属性(因为错误等)。 )

当您尝试使用以下方法解析路径时:

path.parse(json.file_name);

file_name 可能是 undefined,因为可能没有这样的密钥。而且,由于 path.parse() 无法解析 undefined,它 returns 是一个错误,表示只接受 strings(如下所示)。

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined

有许多可能的解决方案,因此在下面列出。

  • 添加检查 file_name 是否可用。如果不是,则不要尝试用 path.parse() 解析它。您可以使用下面的代码来检查它(在第二个 .then() 方法中)。

    if (!json.file_name) {
      console.error("Error fetching file name.");
      return;
    }
    
  • 如果你的API支持,请检查响应正文是否有错误。假设错误类似于 .error,您可以使用下面的代码作为指导(在第二个 .then() 方法中添加)。

    if (!json.file_name && json.error) {
      console.log(json.error.message);
      return;
    }
    
  • 可能还有许多其他(更好)的解决方案,但这些解决方案只是给您一个起点。

解决方案 1 和 2 非常相似,但它们适用于不同的情况。