Javascript Can';t将数据发送到API服务器';尝试区分'时出错;[对象对象]';。只允许使用数组和iterables';

Javascript Can';t将数据发送到API服务器';尝试区分'时出错;[对象对象]';。只允许使用数组和iterables';,javascript,html,angular,api,Javascript,Html,Angular,Api,我想从API服务器发送和接收数据,当我从邮递员发送数据时,它会显示在应用程序中。如果我从应用程序中输入数据,它不会显示,我会收到以下错误尝试区分“[object]”时出错。只允许使用数组和iTerable。我已经附上了所有的文件,我使用的是最新版本 从'@angular/core'导入{Component,OnInit,Input}; 从'@angular/Router'导入{Router}; 从'@angular/forms'导入{FormBuilder,FormGroup,FormArr

我想从API服务器发送和接收数据,当我从邮递员发送数据时,它会显示在应用程序中。如果我从应用程序中输入数据,它不会显示,我会收到以下错误
尝试区分“[object]”时出错。只允许使用数组和iTerable
。我已经附上了所有的文件,我使用的是最新版本


从'@angular/core'导入{Component,OnInit,Input};
从'@angular/Router'导入{Router};
从'@angular/forms'导入{FormBuilder,FormGroup,FormArray};
从'@angular/forms'导入{Validators};
从“../http.service”导入{HttpService};
从“/Todo”导入{Todo};
@组成部分({
//tslint:禁用下一行:组件选择器
选择器:“todo应用程序”,
templateUrl:“./todo app.component.html”,
样式URL:['./todo app.component.css']
})
导出类TodoAppComponent实现OnInit{
myForm:FormGroup;
todoitems=[];
托多利斯特;
提交=错误;
构造函数(专用路由器:路由器,专用formBuilder:formBuilder,专用httpService:httpService){
}
恩戈尼尼特(){
this.myForm=this.formBuilder.group({
todoitems:[this.todolist,Validators.compose([Validators.required,Validators.minLength(3)])
});
this.httpService.gettodo()
订阅
(
(数据:Todo[])=>
{
this.todoitems=数据;
}
);
this.todoitems=JSON.parse(localStorage.getItem('todoitems');
}
获取todoForms(){
将此.myForm.get('todoitems')作为FormArray返回;
}
addTodo(todolist){
if(this.myForm.invalid){
this.submitted=true;
}
if(this.myForm.valid){
console.log('formsubmitted!');
这个.myForm.reset();
this.todoitems.push(todolist);
console.log(this.todoitems);
this.submitted=false;
const newHero:Todo={name}作为Todo;
这个.httpService
.addTodoo(新英雄)
订阅
(
(数据:Todo[])=>
{
this.todoitems=数据;
}
);
}
setItem('todoitems',JSON.stringify(this.todoitems));
}
删除TODO(索引){
这个.todoitems.splice(索引1);
setItem('todoitems',JSON.stringify(this.todoitems));
}
}

const express=require('express');
常量app=express();
var cors=require('cors')
使用(express.json());
app.use(cors())
常量名称=[]
app.get('/api/names',(req,res)=>{
res.send(名称);
}
);
app.post('/api/names',(req,res)=>{
常量名称={
id:names.length,
名称:req.body.name
};
name.push(name);
res.send(名称);
});
app.put('/api/names/:id',(req,res)=>{
常量名称={
名称:req.body.name
};
name.push(name);
res.send(名称);
});
app.delete('/api/names/:id',(req,res)=>{
const index=names.indexOf(name);
名称.接头(索引,1);
res.send(名称);
});
app.listen(3000,()=>console.log('port 3000')

添加
请填写
min 3

{{todoitem}} 删除
我想Mostafa Bagheri可能有些东西。在您的ngOnInit方法中,您订阅的是一个可观察对象,该对象通过查找localstorage实现

那么您在异步可观测完成之前正在执行同步操作

不知道你的全貌,这看起来是错的?尝试注释掉下面注释掉的行,看看这是否会抑制您的错误

如果要从本地存储获取todoitems,请首先执行此操作。检查它是否为空,然后进行可观察

ngOnInit() {
        this.myForm = this.formBuilder.group({
           todoitems : [this.todolist, Validators.compose([Validators.required, Validators.minLength(3)])]

        });

        this.httpService.gettodo()
        .subscribe
        (
          (      data: Todo[])=>
          {
            this.todoitems = data;
          }

        );

          //this.todoitems = JSON.parse(localStorage.getItem('todoitems'));
      }
可能的替代方案(未测试)
我想Mostafa Bagheri可能有些东西。在您的ngOnInit方法中,您订阅的是一个可观察对象,该对象通过查找localstorage实现

那么您在异步可观测完成之前正在执行同步操作

不知道你的全貌,这看起来是错的?尝试注释掉下面注释掉的行,看看这是否会抑制您的错误

如果要从本地存储获取todoitems,请首先执行此操作。检查它是否为空,然后进行可观察

ngOnInit() {
        this.myForm = this.formBuilder.group({
           todoitems : [this.todolist, Validators.compose([Validators.required, Validators.minLength(3)])]

        });

        this.httpService.gettodo()
        .subscribe
        (
          (      data: Todo[])=>
          {
            this.todoitems = data;
          }

        );

          //this.todoitems = JSON.parse(localStorage.getItem('todoitems'));
      }
可能的替代方案(未测试)
this.todoitems=数据
console.log(data)
并说明为什么在同一时刻使用gettodo从服务器获取数据时再次从localStorage获取数据?始终从本地存储获取数据。因为httpService.gettodo()和getfromLocalStorage正在同步运行。是的,请显示此.todoitems中的内容。看起来您的API返回的是一个对象而不是一个数组/iterable。[array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1),array(1)]它显示了这一点,您可以执行console.log('todoitems='+JSON.stringify(Todo;并发布输出。
this.todoitems=data
console.log(data)
并说明为什么在同一时刻使用gettodo从服务器获取数据时再次从localStorage获取数据?始终从本地存储获取数据。因为httpService.gettodo()和getfromLocalStorage正在同步运行。是的,请显示此.todoitems中的内容。看起来您的API返回的是一个对象,而不是