[英]TypeError: Cannot read properties of undefined (reading 'prototype') React Typescript + Express
[英]`TypeError: Cannot read properties of undefined (reading `<typescript_attributes>')`
我是 typescript 的新手。 我收到这样的错误:
TypeError: Cannot read properties of undefined (reading '_service')
at ...
at ...
at ...
尝试调用getNotesHandler()
function 时。 这是一个完整的代码:
import { Request, ResponseObject, ResponseToolkit } from "@hapi/hapi";
import { ClientError } from "../../exceptions/ClientError";
import { NotesService } from "../../services/inMemory/NotesService";
import { notesValidator, NotesValidator } from "../../validator/notes";
export class NotesHandler {
_service: NotesService = new NotesService();
_validator: NotesValidator;
constructor(service: NotesService, validator: NotesValidator) {
this._service = service;
this._validator = validator;
console.log('Service initialized', this._service)
console.log('Validator initialized', this._validator)
}
postNoteHandler(request: Request, h: ResponseToolkit): ResponseObject {
try {
this._validator.validateNotePayload(request.payload);
const data: NoteInput = JSON.parse(request.payload.toString());
const noteId = this._service.addNote(data.title, data.body, data.tags);
const response = h.response({
status: 'success',
message: `Note with id ${noteId} was added`,
data: {
noteId,
}
});
response.code(201);
return response;
} catch(error) {
if (error instanceof ClientError) {
const response = h.response({
status: 'error',
message: error.message,
});
response.code(error.statusCode);
return response;
}
// Server Error
const response = h.response({
status: 'error',
message: 'Internal server error',
});
response.code(500);
console.error(error);
return response;
}
}
getNotesHandler(request: Request, h: ResponseToolkit): ResponseObject {
console.log("getNotesHandler");
const notes = this._service.getNotes();
const response = h.response({
status: 'success',
message: 'Notes were retrieved',
data: notes,
});
response.code(200);
return response;
}
getNoteByIdHandler(request: Request, h: ResponseToolkit): ResponseObject {
try {
const noteId = request.params.id;
const note = this._service.getNoteById(noteId);
const response = h.response({
status: 'success',
data: {
note,
}
});
response.code(200);
return response;
} catch(error) {
if (error instanceof ClientError) {
const response = h.response({
status: 'error',
message: error.message,
});
response.code(error.statusCode);
return response;
}
// Server Error
const response = h.response({
status: 'error',
message: 'Internal server error',
});
response.code(500);
console.error(error);
return response;
}
}
putNoteByHandler(request: Request, h: ResponseToolkit): ResponseObject {
try {
this._validator.validateNotePayload(request.payload);
const noteId = request.params.id;
this._service.editNoteById(
noteId, JSON.parse(request.payload.toString())
);
const response = h.response({
status: 'success',
message: `Note with id ${noteId} was edited`,
});
return response;
} catch(error) {
if (error instanceof ClientError) {
const response = h.response({
status: 'fail',
message: error.message,
});
response.code(error.statusCode);
return response;
}
// Server ERROR!
const response = h.response({
status: 'error',
message: 'Server goes error.',
});
response.code(500);
console.error(error);
return response;
}
}
deleteNoteByIdHandler(request: Request, h: ResponseToolkit): ResponseObject {
try {
const noteId = request.params.id;
this._service.deleteNoteById(noteId);
const response = h.response({
status: 'success',
message: `Note with id ${noteId} was deleted`,
});
return response;
} catch(error) {
if (error instanceof ClientError) {
const response = h.response({
status: 'fail',
message: error.message,
});
response.code(error.statusCode);
return response;
}
// Server ERROR!
const response = h.response({
status: 'error',
message: 'Server goes error.',
});
response.code(500);
console.error(error);
return response;
}
}
如果值undefined
,我还尝试在constructor()
中使用console.log(this._service)
。 但不幸的是没有。 它在我的控制台中给出了 output :
Service initialized NotesService { _notes: [] }
Validator initialized { validateNotePayload: [Function: validateNotePayload] }
仍然困惑为什么_service
在调用getAllNotes()
时undefined
。 _validator
属性发生了同样的问题,并且发生在NotesHandler
class 中的另一个函数/属性中。 提前致谢
该错误没有说明_service
是undefined
。
它说你正在尝试做undefined._service
所以this
必须是undefined
。
在某处传递getNotesHandler
时,您可能会丢失this
上下文。 尝试使用bind
。
此外,它与 TypeScript 无关,因为 TypeScript 在运行时不存在。 这是严格的 JavaScript 错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.