我的终端出现此错误:
类型错误:无法读取未定义的属性(读取“id”)
我正在尝试测试对 API 的调用,但出现错误。
我的功能:
itemToForm = () => {
this.api.send(this.component, 'get',
{ lang: 'ES', filter: { id: this.item['id'] } }
).then(resEsp => {
this.item = resEsp['data'][0];
this.api.send(this.component, 'get',
{ lang: 'EN', filter: { id: this.item['id'] } }
).then(res => {
let itemEng = res['data'][0];
let fields = this.formDef.map(register => register.filter(
field => field['register_table'].indexOf('traduction') !== -1
).map(
field => field['field_name'])
).filter(register => register.length);
fields = fields.length ? fields[0] : [];
if (itemEng) {
this.item = Object.keys(itemEng).reduce((obj, key) => {
obj[key] = this.item[key];
if (fields.indexOf(key) !== -1) {
obj[key + '_eng'] = itemEng[key];
}
return obj;
}, {});
}
if (this.item) {
this.setForm();
}
})
})
}
我的规格文件:
it('should call api.send', () => {
let spy1 = spyOn(api, 'send');
let item = {
id: 1,
name: 'test',
}
component.addItem(item);
component.itemToForm();
expect(spy1).toHaveBeenCalled();
});
发生了什么:
函数
itemToForm()
在 this.item
准备好之前被调用。
有很多策略可以避免这个错误。一个非常简单的策略就是在函数的开头添加一个捕获器,如下所示:
itemToForm = () => {
if(this.item === undefined) {return}
// The rest of the code
}
如果数据尚不存在,这将停止该功能。
一个更优雅的解决方案可能是按照操作顺序进一步向上,找到谁在调用
itemToForm()
并确保数据在调用之前存在。
我碰到了这个问题,但我的问题实际上完全不同。
在我的代码中,由于某些原因,我有
import { SOME_OBJECT } from '.';
应该是这样的:
import { SOME_OBJECT } from './proper-file';
尝试使用 npm install [path to module here]
安装本地 npm 模块时,出现错误
“无法读取未定义的属性(读取‘spec’)”。问题的根源:我没有在其
package.json 文件中给本地模块命名。
我必须补充一下
app.use(bodyParser.urlencoded({ extended: true }));
“打字稿”:“3.8.3”
然后 npm 安装
TypeError: Cannot read properties of undefined (reading 'email')
此错误可能是由于以下原因之一造成的 -
(e.g., express.json()),
确保它在路由处理程序之前应用。如果它在您的路由处理程序之后应用,则 req.body 可能在您的处理程序中未定义。
在我的代码中存在第二点提到的错误
之前
app.use("/api/v1/all", imageRoute);
app.use("/api/v1/user", userRoute);
app.use(express.json({ limit: "3mb" }));
之后
app.use(express.json({ limit: "3mb" }));
app.use("/api/v1/all", imageRoute);
app.use("/api/v1/user", userRoute);
谢谢