我已经使用ExpressJS在Zeit Now上部署了一个应用程序。该应用程序使用Mongoose连接到MongoDB。但是,我使用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 :(得分: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连接的任何lamda中调用此自定义mongoose函数:
`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;`
您当然不必使用express,但我个人还没有继续使用较新的解决方案。这些天之一,我将学习micro.js。