Как подключиться к базе данных MongoDB из приложения, развернутого на ZEIT сейчас?

Я развернул приложение на Zeit Now, используя ExpressJS. Приложение устанавливает соединение с MongoDB, используя Mongoose. Тем не менее, состояние соединения, которое я получаю с помощью mongoose.connection.readyState отображается как 2, что означает "подключение".

Я попытался запустить приложение локально, и оно отлично работает, где я могу записать в базу данных.

const connectionURL = "mongodb+srv://MONGODB_USERNAME:MONGOD_BPASSWORD@cluster1-23abc.mongodb.net/DATABASE_NAME?retryWrites=true"

expressApp.listen(3000, function() {
  console.log("Listening to port 3000");
});

mongoose
  .connect(
    connectionURL, { useNewUrlParser: true }
  )
  .then(function() {
    console.log("db connected!");
  });

expressApp.get("/", function(req, res) {
  res.write(`Connection State:  ${mongoose.connection.readyState}\n`);
  res.end();
});

Я бы ожидал mongoose.connection.readyState быть 1, что обозначает "связанный". Тем не мение, mongoose.connection.readyState застрял на 2, что означает "подключение".

Также, now logs не показывает никаких ошибок.

0 ответов

Вы захотите кэшировать свое соединение MongoDB, чтобы вам не приходилось создавать новое соединение при каждом вызове lamda.

Вы можете создать папку lib и пустой файл mongoose.js (lib/mongoose.js), как я, и поместить внутрь этот код:

`import mongoose from 'mongoose';

let cachedDb = null;

console.log('outside-cachedDB:', cachedDb);
async function connectToDatabase(uri) {
  if (cachedDb) {
    console.log('=> using cached database instance');
    return cachedDb;
  }

  // If no connection is cached, create a new one
  const db = await mongoose.connect(uri, { useNewUrlParser: true });

  console.log('New MongoDB Connected');

  // Cache the database connection and return the connection
  cachedDb = db;
  return db;
}

export default async () => {
  await connectToDatabase(process.env.MONGODB_URI);
};`

Затем вызовите эту настраиваемую функцию мангуста в любой ламде, которой требуется соединение с mongoDB:

`import express from "express";
import mongoose from "../lib/mongoose";

const app = express();

// @route Get api/connect
// @desc Tests post route
// @access Public
app.get("*", async (req, res) => {
   await mongoose();
  // Code to query your DB or whatever here
});

export default app;`

Вы, конечно, не обязаны использовать экспресс, но я лично не переходил на новые решения. На днях выучу micro.js.

Другие вопросы по тегам