无法在类方法

时间:2017-11-14 15:49:46

标签: node.js typescript express

我正在使用express。

在Typescript中编写API REST

我想只声明一次关于数据库的连接信息。因为我的代码运行正常,但我重新定义了每条路由的连接信息。 我试图在构造函数中定义这些信息,但在运行时,我有以下错误消息:TypeError: Cannot read property 'connAttrs' of undefined

这是我的代码:

    import {Router, Request, Response, NextFunction} from 'express';
    import * as path from 'path';
    import * as oracledb from "oracledb";

    export class FormFieldsRouterOracle {
        router: Router;
        connAttrs;

        /**
         * Initialize the FormFieldsRouterOracle
         */
        constructor() {
            this.connAttrs = {
                    'user': 'test',
                    'password': 'test',
                    'connectString': 'linkToDatabase'
                };
            this.router = Router();
            this.init();
        }

        /**
         * GET all fields.
         */
        public getAll(req: Request, res: Response, next: NextFunction) {
            // const conn = {
            //         'user': 'test',
            //         'password': 'test',
            //         'connectString': 'linkToDatabase'
            // };
            // Using conn instead of this.connAttrs works fine

            oracledb.getConnection(this.connAttrs, (err, connection) => {
                if (err) {
                    return console.error(err.message);
                }

                const sql = 'SELECT * FROM my_table';
                connection.execute(sql, {}, {outFormat: oracledb.OBJECT}, (err, result) => {
                    if (err) {
                        console.error(err.message);
                    }
                    else {
                        res.send(JSON.stringify(result.rows));
                    }

                    connection.release(err => {
                        if (err) {
                            console.error(err.message);
                        }
                        else {
                            console.log("getAll : Connectioon released");
                        }
                    })
                });
            });

        }
        /**
         * Take each handler, and attach to one of the Express.Router's
         * endpoints.
         */
        init() {
            this.router.get('/', this.getAll);
        }
    }

    // Create the FormFieldsRouter, and export its configured Express.Router
    const formFieldsRoutes = new FormFieldsRouterOracle();
    formFieldsRoutes.init();

    export default formFieldsRoutes.router;

我想这可能与this的范围有关,但我尝试了几件事但没有成功。我还想避免使用箭头功能,并继续在我的this.getAll方法中使用init()

0 个答案:

没有答案