angular - Angular 应用程序将 Array 检测为 Object 并返回错误
问题描述
在我的应用程序中,我将文件存储在数据库中,存储文件后,我将表中创建的行的 ID 返回到我的 Angular 应用程序,以将其添加到用户信息中。
当我得到 id 时,它们作为 Array 返回,但是我不知道为什么,Angular 向我显示了一个 Object 元素的错误。
这是我的 API 上用于存储文件并返回 ID 的函数
function uploadFiles(req, res, next) {
let queries = []
for (var i = 0; i < req.files.length; i++) {
queries.push(db.any('insert into public.documents(original_name,mimetype,path) values(' + "'" +
req.files[i].originalname + "','" + req.files[i].mimetype + "','" + req.files[i].path +
"') returning id_document,original_name"))
}
Promise.all(queries).then((data)=>{
res.json(data);
},(err)=>{
console.log('uploadFiles error : ',err)
})
}
这是我将文件发送到 API 的方法,然后是我如何获取 id 以将它们添加到我的用户信息中
for (var i = 0; i < this.selectedFiles.length; ++i) {
let files = this.selectedFiles[i].files
await this.patientService.uploadFiles(files).then((data)=> {
console.log(data)
let result = []
for (var j = 0; j < data.length; ++j) {
result.push({'id':data[j][0].id_document,'name':data[j][0].original_name})
}
// add result to user information
})
}
和uploadFiles
功能
async uploadFiles(files){
let formData = new FormData()
for (var i = 0; i < files.length; ++i) {
formData.append('files',files[i])
}
return await this.httpClient.post(LOCATION_API + 'upload-file', formData).toPromise()
}
所以这里console.log(data)
给我看这个
正如我们所看到的,它是一个数组,但这是我得到的错误
最后,奇怪的是显示了错误,但应用程序仍然有效。但是如果它有效,我不希望错误留在我的应用程序上......
解决方案
问题是您没有传递有关 API 返回的类型的任何信息,因此this.httpClient.post
使用默认值,它是object
. 您可以在文档中找到它。
要解决此问题,您需要将预期的返回类型显式定义为以下的通用参数httpClient.post
:
interface FileData {
id_document: string;
original_name: string;
}
this.httpClient.post<Array<Array<FileData>>(/* ... */);
^---------Here--------^
另请注意,await
在从 async 函数返回的承诺之前以及.then
使用时不需要
推荐阅读
- aws-lambda - AWS Cognito Pre-Token Generation 不向 ID 令牌添加自定义声明(使用 ALB 设置 + Auth 代码流)
- treesitter - tree-sitter 测试文件语法与编程语言语法冲突
- python - PyLogit 数据框格式和条件 Logit 预测
- pandas - 如何根据单元格位置设置背景颜色?
- sql - SQL窗口函数被分组,但仍然得到“必须是聚合表达式或出现在GROUP BY子句中”
- c# - 实体框架 - 禁用模型兼容性检查,同时还允许自动升级
- c# - C# 图形 DrawLine 删除
- javascript - 更新 DataTable 中的嵌套 JSON 数据
- r - 使用 RVest 获取表中的链接 HTML 文本
- ajax - 使用 CORS 到 API 网关的 AJAX POST 不起作用