将值分配给TypeScript中的类属性

瓦拉里

当我需要在TypeScript中为我的类属性分配值但出现错误时,我在做什么错: ERROR : uncaughtException: Cannot set property 'auth' of undefined

我需要auth最初不保留任何信息的属性(1)来保存我在done方法中分配的信息但是,每当我想为该属性分配任何值时,在我的情况下它都不起作用。我已经检查了很多次,并且在done方法中的auth不是未定义的。它保存传递给它的信息,但无论如何都会弹出错误。

Setters而且Getters也没有帮助。

如果我需要在Angular中分配此值,那肯定可以,但是我想Class的使用会有些许差异。

import fs from 'fs';
import readline from "readline";
import { google } from "googleapis";
import path from 'path';
import { logger } from './winston';

class connectGoogleAPI {

    private SCOPES = [
        'https://www.googleapis.com/auth/gmail.readonly',
        'https://www.googleapis.com/auth/gmail.modify',
        'https://www.googleapis.com/auth/gmail.compose',
        'https://www.googleapis.com/auth/gmail.send'
    ];

    private readonly token_path = path.join(process.cwd(), 'token.json');
    private readonly credential_path = path.join(process.cwd(), 'credentials.json');
    private auth: any = 'value from auth';

    set _auth(auth: any) {
        this.auth = auth;
    }

    get _auth(): any {
        return this.auth;
    }

    constructor() {
    }

    private done(_a: any) {
        this.auth = _a;
        // this.auth = (_a as object);
        // console.log('done');

    }

    connect() {
        // console.log('connect');

        // Load client secrets from a local file.
        fs.readFile(this.credential_path, { encoding: 'utf-8' }, (err: any, content: any) => {
            if (err) return console.log('Error loading client secret file:', err);
            // Authorize a client with credentials, then call the Gmail API.
            this.authorize(JSON.parse(content), this.done);
            // authorize(JSON.parse(content), listLabels);
        });
    }

    private authorize(credentials: any, callback: any) {
        // console.log('authorize');

        const { client_secret, client_id, redirect_uris } = credentials.web;
        const oAuth2Client = new google.auth.OAuth2(
            client_id, client_secret, redirect_uris[0]);

        // Check if we have previously stored a token.
        fs.readFile(this.token_path, { encoding: 'utf-8' }, (err: any, token: any) => {
            if (err) return this.getNewToken(oAuth2Client, callback);
            oAuth2Client.setCredentials(JSON.parse(token));
            logger.info(`Connected to Google API successfully`);
            callback(oAuth2Client);
        });
    }

    private getNewToken(oAuth2Client: any, callback: any) {
        // console.log('getNewToken');

        const authUrl = oAuth2Client.generateAuthUrl({
            access_type: 'offline',
            scope: this.SCOPES,
        });
        logger.warn('Authorize this app by visiting this url:', authUrl);
        const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout,
        });
        rl.question('Enter the code from that page here: ', (code: any) => {
            rl.close();
            oAuth2Client.getToken(code, (err: any, token: any) => {
                if (err) return logger.error('Error retrieving access token', err);
                oAuth2Client.setCredentials(token);
                // Store the token to disk for later program executions
                fs.writeFile(this.token_path, JSON.stringify(token), (err: any) => {
                    if (err) return console.error(err);
                    logger.info('Token stored to', this.token_path);
                });
                return callback(oAuth2Client);
            });
        });

    }

    getAuth() {
        if (this.auth === null || this.auth === undefined) {
            logger.warn('Getting again auth - Google API');
            this.connect();
        }
        return this.auth;
    }

}

export const googleAPI = new connectGoogleAPI();

我将不胜感激任何帮助和提示。

1.我已经尝试在构造函数中分配一些信息,所以它不是空的,但它也能正常工作

瓦拉里

起初我没有遇到问题,但问题在范围内。我调用了应该将值分配给属性的方法,作为回调函数。

我忘了把类绑定到它上)以防万一有人花很多时间编码并厌倦了看它...

    connect() {
        // Load client secrets from a local file.
        fs.readFile(this.credential_path, { encoding: 'utf-8' }, (err: any, content: any) => {
            if (err) return console.log('Error loading client secret file:', err);
            // Authorize a client with credentials, then call the Gmail API.
            this.authorize(JSON.parse(content), this.done.bind(this));
        });
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将列表值分配给类属性

来自分类Dev

将范围分配给类属性

来自分类Dev

如何将数组中对象的属性分配给多个类属性?

来自分类Dev

如何将类方法分配给类属性?

来自分类Dev

将值分配给Swift属性

来自分类Dev

将CSV值分配给类属性,使用抽象类将输出处理为csv

来自分类Dev

如何使用TypeScript中的Object Destructuring将值分配给构造器中的类级别属性?

来自分类Dev

将数据集中的值分配给子类的属性值

来自分类Dev

将产品属性值分配给magento中的另一个产品属性

来自分类Dev

用相同的方法将相同的值分配给多个类属性

来自分类Dev

功能:将属性中的值分配给 DECLARE 中的变量

来自分类Dev

是否可以通过引用而不是副本将数组分配给类属性?

来自分类Dev

将值分配给string()类型的自动实现的属性

来自分类Dev

自动将值分配给$ fillable属性(Laravel 4)

来自分类Dev

C#将值分配给结构错误的属性

来自分类Dev

将值分配给框架内小部件的属性

来自分类Dev

无法将值分配给struct属性。C ++

来自分类Dev

JSF自动将值分配给bean属性

来自分类Dev

将值分配给自动实现的属性

来自分类Dev

自动将值分配给$ fillable属性(Laravel 4)

来自分类Dev

通过ID将值分配给对象属性

来自分类Dev

无法将值分配给对象的属性

来自分类Dev

将 img 的值分配给 value 属性

来自分类Dev

如何将引用值分配给通用属性

来自分类Dev

如何使用Typescript将值分配给构造函数中的数组?

来自分类Dev

我可以将值分配给JavaScript中的空初始化属性吗?

来自分类Dev

在详细信息视图yii2中将功能分配给值属性

来自分类Dev

路由参数如何将值分配给Blazor中的属性?

来自分类Dev

将字符串值分配给指向struct的指针中的属性

Related 相关文章

  1. 1

    将列表值分配给类属性

  2. 2

    将范围分配给类属性

  3. 3

    如何将数组中对象的属性分配给多个类属性?

  4. 4

    如何将类方法分配给类属性?

  5. 5

    将值分配给Swift属性

  6. 6

    将CSV值分配给类属性,使用抽象类将输出处理为csv

  7. 7

    如何使用TypeScript中的Object Destructuring将值分配给构造器中的类级别属性?

  8. 8

    将数据集中的值分配给子类的属性值

  9. 9

    将产品属性值分配给magento中的另一个产品属性

  10. 10

    用相同的方法将相同的值分配给多个类属性

  11. 11

    功能:将属性中的值分配给 DECLARE 中的变量

  12. 12

    是否可以通过引用而不是副本将数组分配给类属性?

  13. 13

    将值分配给string()类型的自动实现的属性

  14. 14

    自动将值分配给$ fillable属性(Laravel 4)

  15. 15

    C#将值分配给结构错误的属性

  16. 16

    将值分配给框架内小部件的属性

  17. 17

    无法将值分配给struct属性。C ++

  18. 18

    JSF自动将值分配给bean属性

  19. 19

    将值分配给自动实现的属性

  20. 20

    自动将值分配给$ fillable属性(Laravel 4)

  21. 21

    通过ID将值分配给对象属性

  22. 22

    无法将值分配给对象的属性

  23. 23

    将 img 的值分配给 value 属性

  24. 24

    如何将引用值分配给通用属性

  25. 25

    如何使用Typescript将值分配给构造函数中的数组?

  26. 26

    我可以将值分配给JavaScript中的空初始化属性吗?

  27. 27

    在详细信息视图yii2中将功能分配给值属性

  28. 28

    路由参数如何将值分配给Blazor中的属性?

  29. 29

    将字符串值分配给指向struct的指针中的属性

热门标签

归档