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

Я развернул приложение на 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 не показывает никаких ошибок.

1 Ответ

0 голосов
/ 22 июня 2019

Вы захотите кешировать ваше соединение 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);
};`

Затем вызвать эту пользовательскую функцию mongoose вЛюбая лямда, которая нуждается в соединении 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.

...