【发布时间】:2020-10-06 00:53:44
【问题描述】:
我有一个用于处理 mysql 连接的类。它具有创建连接池和运行插入的功能。问题是当我尝试使用pool.query 运行插入时,该函数失败。它产生的错误是:
errorMessage: TypeError: Cannot read property 'pool' of undefined
在执行insert() 函数之前似乎没有定义this.pool 属性。
为什么pool 属性在conn.createPool 调用中定义时会未定义?
这是连接类:
const mysql2 = require('mysql2');
class Connection {
constructor(options = {}) {
this.options = options
}
createPool () {
this.pool = mysql2.createPool({
host: this.options.host,
user: this.options.user,
database: 'my-db',
ssl: 'Amazon RDS',
password: this.options.password,
authPlugins: {
mysql_clear_password: () => () => Buffer.from(this.options.password + '\0')
}
});
}
insert () {
const promise = new Promise(function (resolve, reject) {
try {
let sql = "INSERT INTO included_network(field1, field2, field3, created_date, modified_date, created_by, modified_by) VALUES ?";
let values = [
['229', 'data1', 'moredata', Date.now(), Date.now(), 'service', 'service'],
['608', 'data2','moredata', Date.now(), Date.now(), 'service', 'service'],
['608', 'data3','moredata', Date.now(), Date.now(), 'service', 'service'],
['673', 'data4','moredata', Date.now(), Date.now(), 'service', 'service'],
];
this.pool.query(sql, [values],function (error, results, fields) {
if (error) throw error;
console.log(results.affectedRows); //Show 1
resolve (results.affectedRows);
});
} catch (e) {
reject(e);
}
})
return promise;
}
}
module.exports = { Connection };
这是试图使用该类创建连接并执行插入的处理程序:
const utils = require('./utils');
const conns = require('./connection');
let response = {
statusCode: 200,
body: {
message: 'SQS event processed.',
},
};
exports.handler = async(event) => {
try {
const options = {
host: 'aurora-proxy.proxy.us-east-1.rds.amazonaws.com',
user: 'service'
};
const token = utils.getToken(options);
options.password = token;
const conn = new conns.Connection(options);
conn.createPool();
await conn.insert();
} catch (e) {
console.log('There was an error while processing', { errorMessage: e});
response = {
statusCode: 400,
body: e
}
}
return response;
};
【问题讨论】:
标签: node.js aws-lambda amazon-rds