无法在路由Node.js Express Typescript中的方法控制器内调用方法

时间:2019-05-13 02:25:28

标签: node.js typescript express routes nodejs-server

我上了两节课; authenticationRoutes.ts和authenticationController.ts。在authenticationRoutes中,我正在调用“ authenticationController.test”,“ authenticationController.test”方法将调用“ authenticationController.generateAccessAuthToken”方法。每当执行此操作时,都会出现以下错误:未处理的拒绝TypeError:无法读取属性'generateAccessAuthToken' 不确定的

error: conversion to non-scalar type requested
authenticationRoutes.ts
import { authenticationController } from '../controllers/authenticationController';

        //TEST ROUTE
        this.router.get('/users',  authenticationController.test);

我希望能够做到我所描述的而不会收到错误。

2 个答案:

答案 0 :(得分:1)

我认为这可以解决问题:

this.router.get('/users', authenticationController.test.bind(AuthenticationController));

基本上,当您拥有带有方法A的类b时,如果您像这样传递A.b

const a = new A();
const b = a.b;
b(); // now 'this' is lost, any reference to `this` in b() code would be undefined

您仅通过函数。现在它与A类无关,它只是一个函数

因此,除其他外,您可以使用bind显式设置函数的this上下文:

const a = new A();
const b = a.b.bind(a);
b(); // so now b() is forced to use a as this context

我敢打赌,关于您的问题有很多重复的内容,但我找不到快速的人,因为搜索很棘手(js中的this绑定有很多问题)。

希望这会有所帮助。

答案 1 :(得分:0)

我遇到了同样的问题并解决了它:

public test = (req: Request, res: Response) => {
        dbSequelize().User.findAll({
            where: {
                id: '0'
            },
            attributes: ['id']
        }).then((user: UserInstance[]) => {
            this.generateAccessAuthToken('0').then((response: any) => {
                console.log(response);
                res.send(response);
            });
        })
    }