带有 nodejs 和 mysql => 的无服务器进程在完成请求之前退出
Serverless with nodejs and mysql => Process exited before completing request
我正在使用 nodejs 模板开发一些无服务器功能。我有一个连接到 mysql 数据库并检索一些数据的服务。第一次调用时一切正常,但当我再次调用时,我收到一条 "Process exited before completing request" 错误消息。
如果我再次尝试同一个呼叫,我会收到数据。所以该服务在奇数调用上运行正常,它在偶数调用上返回错误(有趣吧?)。这是处理函数的代码:
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 都应该有响应。
我看不出这有什么问题,为什么发出奇怪的请求是错误的。有人可以帮忙吗?
提前致谢!
自己解决了...
问题是我在处理程序外部创建了 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;
};
希望这对您有所帮助。谢谢!
我正在使用 nodejs 模板开发一些无服务器功能。我有一个连接到 mysql 数据库并检索一些数据的服务。第一次调用时一切正常,但当我再次调用时,我收到一条 "Process exited before completing request" 错误消息。 如果我再次尝试同一个呼叫,我会收到数据。所以该服务在奇数调用上运行正常,它在偶数调用上返回错误(有趣吧?)。这是处理函数的代码:
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 都应该有响应。
我看不出这有什么问题,为什么发出奇怪的请求是错误的。有人可以帮忙吗?
提前致谢!
自己解决了...
问题是我在处理程序外部创建了 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;
};
希望这对您有所帮助。谢谢!