我正在使用nodejs模板开发无服务器的一些函数。我有一个连接到mysql数据库并检索一些数据的服务。我第一次拨打电话时一切都很好,但是当我重复这个电话时,我收到一个“在完成请求之前已退出进程”错误消息。 如果我再次尝试相同的呼叫,我会收到数据。所以服务在奇怪的调用上做得正确,它在偶数调用上返回错误(好吧?)。这是处理函数的代码:
module.exports.getAll = (event, context, done) => {
deviceRepository.getAllDevices().then((response) => {
done(null, { response });
}).catch((error) => {
done(error);
});
};
这是存储库函数的代码:
const mysql = require('mysql');
const when = require('when');
const config = require('./config');
const conn = mysql.createConnection({
host: config.RDSHOST,
user: config.RDSUSER,
password: config.RDSPASS,
database: config.RDSDB,
port: config.RDSPORT
});
module.exports.getAllDevices = () => {
const deferred = when.defer();
conn.connect();
conn.query('SELECT * FROM device', (err, rows) => {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(rows);
}
conn.end();
});
return deferred.promise;
};
正如您所看到的,我使用'when'库中的promises。我在处理程序中调用'done'回调函数,并且在每种可能的情况下都应该响应promise。
我看不出这有什么问题,为什么奇怪的请求是错误的。有人可以帮忙吗?
提前致谢!
答案 0 :(得分:2)
由我自己解决......
问题是我在处理程序之外创建了createConnection(当我声明conn常量时)。
在处理函数中移动createConnection声明在每次调用时都按预期工作。
const mysql = require('mysql');
const when = require('when');
const config = require('./config');
module.exports.getAllDevices = () => {
const conn = mysql.createConnection({
host: config.RDSHOST,
user: config.RDSUSER,
password: config.RDSPASS,
database: config.RDSDB,
port: config.RDSPORT
});
const deferred = when.defer();
conn.connect();
conn.query('SELECT * FROM device', (err, rows) => {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(rows);
}
conn.end();
});
return deferred.promise;
};
希望这会有所帮助。谢谢!