我正在使用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()
。