无服务器与nodejs和mysql =>在完成请求之前退出流程

时间:2016-08-25 10:47:40

标签: mysql node.js aws-lambda serverless-framework

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

我看不出这有什么问题,为什么奇怪的请求是错误的。有人可以帮忙吗?

提前致谢!

1 个答案:

答案 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;
};

希望这会有所帮助。谢谢!