【问题标题】:Property 'url' does not exist on type 'string' JSON类型“字符串”JSON 上不存在属性“url”
【发布时间】:2021-06-17 21:05:56
【问题描述】:

我正在尝试发送一些 JSON 的 url,当我将某些内容上传到 azure blob 存储时。对象是req.files。当我console.logreq.files 时,我得到类似这样的东西:

[
  {
    fieldname: 'chooseFile',
    originalname: 'video.mov',
    encoding: '7bit',
    mimetype: 'video/quicktime',
    container: 'asset-afe1b5d0-cf8f-11eb-9615-13b96d691770',
    blobPath: '1623950892848-aGxhZC5tb3Y%3D.mov',
    url: 'https://cdn.example.com/item/this/that'
  }
]

如果我尝试说,console.logreq.files.url,我会收到类似这样的错误:

Property 'url' does not exist on type '{ [fieldname: string]: File[]; } | File[]'.
  Property 'url' does not exist on type 'File[]'

所以我试过这个:

const filedata = JSON.stringify(req.files)
console.log(filedata)

它返回更像这样的东西:

[{"fieldname":"chooseFile","originalname":"video.mov","encoding":"7bit","mimetype":"video/quicktime","container":"path","blobPath":"item.mov","url":"https://cdn.example.net/this/path/here/there"}]

现在如果我尝试console.logfiledata.url,我会收到如下错误:

Property 'url' does not exist on type 'string'

【问题讨论】:

  • filedata 是一个字符串。这就是stringify 返回的内容。而且,req.files 是一个数组
  • 如您所见,您正在记录的是一个数组,因此您应该执行以下操作:console.log(filedata[0].url)... 但最重要的是,您可能想要使用而不是 JSON.stringify JSON.parse
  • req.files 似乎是对象的集合(数组),每个对象代表一个文件。您需要注意您尝试访问的文件,如下所示:req.files[0].url

标签: javascript json typescript


【解决方案1】:

这里的第一个问题是req.files 是一个数组,而不是一个对象。所以你应该访问req.files[0].url 来访问req.files 中的第一个元素,然后获取它的url 属性。

第二个问题是尝试在JSON.stringify 数组之后获取属性urlJSON.stringify 返回一个 JS 对象的字符串表示,而字符串没有url 属性。

因此,您很可能是指console.log(req.files[0].url),假设您知道req.files 中只会有一个元素,或者您只需要第一个元素。

【讨论】:

  • 事实证明,我开始挖掘创建req.files 的包的代码,果然找到了JSON.parse。这不是一个数组。
【解决方案2】:

尽管所有 cmets 和答案都声称这是一个数组,但在查看包的源代码后,我看到了 JSON.parse。不,这不是一个数组。我做的一切都是正确的。这是一个不相关的 Typescript 错误。我通过将req 的类型从express.Request 更改为any 来修复它。然后req.files.url 就可以正常工作了。

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2019-08-25
    • 2020-12-16
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多