我已将一个属性声明为自定义类,并且在实例化主类的对象后尝试访问其方法。但是当我尝试访问我的属性方法时出现以下错误:
TypeError: Cannot read property 'fcm' of undefined
这是我声明我的类和属性的方式:
class PushController {
public fcm: FCMServerSide = new FCMServerSide('myKey')
async getInstanceTokenInfo(request: Request, response: Response) {
try {
const {
token
} = request.body
console.log("==> Token Info: ", token)
const apidata = await this.fcm.getInstanceTokenInfo(String(token))
if (token) {
return response.json({result: true, apidata })
} else {
return response.json({result: false, message:"No Token Provided"})
}
} catch (e) {
return response.json({ result: false, message: e.stack })
}
}
显然,当我调用 this.fcm.getInstanceTokenInfo 方法时出现错误。
检查我的代码,我可以看到我在路由脚本中正确生成了一个实例:
...
import PushController from './controllers/PushController'
const routes = express.Router();
const pushController = new PushController()
routes.post('/push-token/instance/info', pushController.getInstanceTokenInfo)
如上所示,我使用 express 生成路由。我该怎么做才能纠正这个错误?
答案 0 :(得分:0)
您可以尝试使用构造函数来实例化 PushController 类。 像这样:
class PushController {
public fcm: FCMServerSide;
constructor(){
this.fcm = new FCMServerSide('myKey')
}
async getInstanceTokenInfo(request: Request, response: Response) {
try {
const {
token
} = request.body
console.log("==> Token Info: ", token)
const apidata = await this.fcm.getInstanceTokenInfo(String(token))
if (token) {
return response.json({result: true, apidata })
} else {
return response.json({result: false, message:"No Token Provided"})
}
} catch (e) {
return response.json({ result: false, message: e.stack })
}
}
答案 1 :(得分:0)
我找到了解决方案。 当我们为路由器传递一个类方法时,我们会丢失“this”实例。 所以你可以用这种方式来解决你的问题:
import PushController from './controllers/PushController'
const routes = express.Router();
const pushController = new PushController()
routes.post('/push-token/instance/info', pushController.getInstanceTokenInfo.bind(pushController))