Angular 2 - Http Post返回未定义的错误

时间:2017-07-21 15:13:07

标签: angular rxjs

我正在组建一个管理功能来创建用户。用户创建的一部分是为他们提供对某些数据库的访问权。

在代码中,我发送一个http帖子到我的web api来创建用户。成功创建后,我将添加用户数据库绑定。

private createUserDatabases(createdUser: Users) {
        console.log(JSON.stringify(createdUser));
        if (this.isSuperAdmin && this.newUserDatabases.length > 0) {    
            var newUserDbs: UserDatabase[] = [];
            for (var i = 0; i < this.newUserDatabases.length; i++) {                
                var newUserDatabase = new UserDatabase();                            
                newUserDatabase.database_Id = this.newUserDatabases[i].id;
                newUserDatabase.user_Id = createdUser.id;
                newUserDbs.push(newUserDatabase);
                //console.log("Getting ready to create");
                //this.usersService.addUserToDatabase(newUserDatabase);
                //    .subscribe(
                //    data => console.log(JSON.stringify(data)),
                //    error => {
                //        this.alertService.error(error._body);
                //        console.log("userDb" + error._body);
                //    }
                //);
            }

            console.log(newUserDbs);
            return this.usersService.addUserToDatabase(newUserDbs);

            //this.isOpened = false;
        }    
    }    
onSubmit() {   
            var createdUser: Users;
            this.usersService.create(this.user)
                .do(u => createdUser = u)
                .flatMap(u => {                
                    return this.createUserDatabases(u);
                })
                .subscribe(
                data => {
                    console.log(JSON.stringify(data));
                    this.loadAllUsers();
                    this.isOpened = false;
                },
                error => {
                    this.alertService.error(error._body);
                    console.log(error._body);
                }
              )            
        }

数据库绑定作为对象数组(字符串,字符串)发送。我已尝试将此作为每个所选数据库的单独调用,以及对所有选定数据库的单个调用。

这是服务

   create(newUser: Users) {
        return this.http.post(this.config.apiUrl + '/api/accounts/create', JSON.stringify(newUser), this.jwt())
            .map((response: any) => response.json());
    }


    addUserToDatabase(newUserToDatabases: UserDatabase[]) {
        console.log(JSON.stringify(newUserToDatabases));
        return this.http.post(this.config.apiUrl + '/api/userdatabases/create', JSON.stringify(newUserToDatabases), this.jwt())
            .map((response: any) => response.json());
    }

所有内容都按照需要完成,并且两个请求都没有返回错误,但是,我收到一个未定义的错误而没有将其转换为data =&gt;订阅的一部分。我发现许多文章和插件似乎暗示这种设置应该有效。

1 个答案:

答案 0 :(得分:1)

地图代码下面的

使用

.catch((error)=> {
 return Observable throw(error)
 };