aboutsummaryrefslogtreecommitdiff
path: root/pages/lib/mongodb.js
diff options
context:
space:
mode:
Diffstat (limited to 'pages/lib/mongodb.js')
-rw-r--r--pages/lib/mongodb.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/pages/lib/mongodb.js b/pages/lib/mongodb.js
new file mode 100644
index 0000000..dbbf0dc
--- /dev/null
+++ b/pages/lib/mongodb.js
@@ -0,0 +1,30 @@
+// This approach is taken from https://github.com/vercel/next.js/tree/canary/examples/with-mongodb
+import { MongoClient } from "mongodb";
+
+if (!process.env.MONGODB_URI) {
+ throw new Error('Invalid/Missing environment variable: "MONGODB_URI"');
+}
+
+const uri = process.env.MONGODB_URI;
+const options = {};
+
+let client;
+let clientPromise;
+
+if (process.env.NODE_ENV === "development") {
+ // In development mode, use a global variable so that the value
+ // is preserved across module reloads caused by HMR (Hot Module Replacement).
+ if (!global._mongoClientPromise) {
+ client = new MongoClient(uri, options);
+ global._mongoClientPromise = client.connect();
+ }
+ clientPromise = global._mongoClientPromise;
+} else {
+ // In production mode, it's best to not use a global variable.
+ client = new MongoClient(uri, options);
+ clientPromise = client.connect();
+}
+
+// Export a module-scoped MongoClient promise. By doing this in a
+// separate module, the client can be shared across functions.
+export default clientPromise;