【发布时间】:2020-10-07 10:20:01
【问题描述】:
对不起,如果这个问题没有意义,我对 MEAN 堆栈非常陌生。我一直在尝试从快速中间件中获取一个数组以显示在有角度的前端。我一直遇到的问题是,即使所有内容都可以编译并且似乎可以正常工作,但我在控制台中收到错误消息“错误类型错误:'this.brackets is undefined'”。
这似乎是问题的代码
'''
import { Injectable } from "@angular/core";
import { Bracket } from './bracket.model';
import { Subject } from 'rxjs';
import { HttpClient } from '@angular/common/http';
@Injectable({providedIn: 'root'})
private brackets: Bracket[] = [];
private bracketsUpdated = new Subject<Bracket[]>();
constructor(private http: HttpClient) {}
getBracket() {
this.http.get<{message: string, brackets: Bracket[]}>('http://localhost:3000/api/brackets')
.subscribe((bracketData) => {
this.brackets = bracketData.brackets;
this.bracketsUpdated.next([...this.brackets]); // this is the problem line
});
console.log(this.brackets);
}
'''
这就是数组的来源
'''
app.use("/api/brackets", (req, res, next)=>{
const bracket= [
{
id: 'alksdfjalskj',
bracketTitle:'bracket from node',
bracketBuyIn: "2",
bracketPlayer1:'name',
bracketPlayer2:'name2',
bracketPlayer3:'name3',
bracketPlayer4:'name4',
bracketPlayer5:'name5',
bracketPlayer6:'name6',
bracketPlayer7:'name7',
bracketPlayer8:'name8'
}
];
console.log(bracket);
res.status(200).json({
message:'Bracket from node',
bracket:bracket
});
});
'''
在 vs 代码中定义了它,所以我很困惑为什么它不起作用。
编辑:所指的括号不是命名错误。它指的是一个名为 Bracket 的导入模型
【问题讨论】:
-
它在后端被称为
bracket,而你在前端尝试brackets。尝试在后端添加s。this.brackets也被异步赋值,所以当你做console.log(this.brackets)时它可能仍然是未定义的。控制台日志也应该在订阅中移动。 -
我不认为这是一个命名错误。如果我的想法是正确的,前端的括号指的是导入的模型
-
我指的是
bracketData.brackets中的brackets。您尝试从响应中检索的brackets不存在。它被称为bracket。因为你在后台说bracket:bracket。要么在后端说brackets:bracket,要么在前端说bracketData.bracket。 -
你是对的。这是链条上某处的命名错误。花了一点时间浏览所有内容并最终找到它.. 感谢您的帮助
标签: node.js angular rxjs subject