Как подключиться к базе данных 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.