node.js - Angular RxJs TypeError“未定义”
问题描述
抱歉,如果这个问题没有意义,我对 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 的进口模型
解决方案
您在前端使用的模型与您从后端收到的值无关。该模型仅用于断言您尝试分配给变量的数据类型。
但是如果你在后台看到
res.status(200).json({
message:'Bracket from node',
bracket:bracket
});
您清楚地将对象分配给名为bracket
, NOT brackets
的属性。更确定的是,您从后端收到的值是这个
{
message:'Bracket from node',
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'
}]
}
所以它被称为bracket
没有s
.
现在是前端部分。
this.brackets = bracketData.brackets;
在这里,LHSthis.brackets
肯定会 100% 遵守您定义的模型。它不会跳过任何箍来分配任何不符合Bracket
您定义的模型的值。但是 RHSbracketData.brackets
一点也不关心你的模型。它不必。它来自后端,这是它唯一遵守的。
如果您执行 a console.log(bracketData)
,您将看到以下内容
{
message:'Bracket from node',
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'
}]
}
现在,请再仔细看看。您将永远无法找到brackets
财产。因为你bracket
在后端调用它。
因此,当您尝试时bracketData.brackets
,该属性中没有数据。它也可能bracketData.magicData
适用于所有 Javascript 关心。它将返回未定义undefined
的属性。
推荐阅读
- java - 当字符属性更改时,Java JTextPane 不会更新其大小
- bash - 使用 sudo 和 awk 进行 Bash while 循环
- python - 是否可以在 PysimpleGui 表中插入复选框?
- microsoft-graph-api - 从 Teams 获取活跃的 PSTN 来电显示
- android - 在推送通知中显示视频、gif 或横幅
- c - POSIX 的 FTW 结构成员 - 他们告诉我们什么?
- asterisk - 当我在 Asterisk 中拨打任何分机时,首先播放一些问候消息?
- c++ - 对话关闭信号
- capacitor - 无法在 Capacitor Ionic 的应用程序视图中打开 PDF 文件
- wpf - 将带有数据库的 wpf 应用程序提供给客户端