MongoDB AWS无服务器Lambda连接挂起并过时

时间:2019-12-14 16:27:33

标签: node.js mongodb express mongoose serverless

我正在为我的api使用无服务器的nod​​e.js快速布局,我正在使用mongoose作为mongoDB Connection的包装器。然后,我将db函数称为快速中间件函数。

但是,每出现3/4个连接,该连接就会失效,因此,如果mongoose.connection.readyState读为true,则该连接不正确。

我遍历了许多博客和github问题中的mongoose,我尝试了从删除buffer options到更改socket timeout设置的所有过程,但是没有运气。看来很多人都遇到了这个问题,但是github moongoose的贡献者只是在解决那些从未提供反馈的问题。

任何帮助将不胜感激。

DB.js

const mongoose = require('mongoose')
mongoose.Promise = global.Promise;


module.exports = {
  async start() {
    return new Promise(function(resolve, reject) {
      if (mongoose.connection.readyState  ) {
        console.log('=> using existing database connection')
        return resolve();
      }

      console.log('=> using new database connection')
      return mongoose.connect(process.env.MONGODB_URI, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        autoReconnect: true,
        poolSize: 25
      }).then((db) => {
        return resolve(db);
      }).catch((error) => {
        return reject(error);
      })
    });
  }
}

快速处理程序调用

const DB = require('../functions/db.js');
const Response = require('../classes/Response.js');

const databaseHandler = async (req, res, next) => {
  try {
    await DB.start();
    next();
  } catch (error) {
    var responder = Response({
      statusCode: 502,
      success: false,
      status: "server-error",
      message: "There was an issue connecting to the database."
    })
    res.status(responder.statusCode).send(responder.response)
  }

}
module.exports = databaseHandler

0 个答案:

没有答案