带有 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;
};

希望这对您有所帮助。谢谢!