gpt4 book ai didi

node.js - 我如何使用 Express 构建对 MongoDB 3+ 的获取请求

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:37 26 4
gpt4 key购买 nike

在新的 MongoDB 版本 3+ 中使用 ExpressJS 调用 app.get 的位置
我已连接到 MongoDB 数据库并能够写入对象,
但是,在我的 server.js 中,我有以下代码。

  const MongoClient = require('mongodb').MongoClient,
assert = require('assert');


const dbName = 'database name';

const uri = "mongodb+srv://...";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

client.connect(async function (err) {

assert.equal(null, err);
if (err) return 1;

try{

const db = client.db(dbName);

} catch(err){
console.log("error output:" +err);
}
client.close();

});

app.get('/test', function (req, res) {
var cursor = db.collection('collection-name').find().toArray(function (err, results) {
res.render('test.ejs', {
collection-name: results
});
});
});

情况 1. ReferenceError: 上面的示例未定义 db
情况 2. 如果我把它放在 mongoDB try catch 函数中,我会得到 test.ejs 的 404

尚未找到任何准确的示例。

最佳答案

问题是您在 client.connect 中定义了 db 变量,但您试图在 GET 路由中访问 db 变量。由于变量 db 变量的作用域无法在其定义的函数之外访问。

共享 MongoClient 的最简单方法是使用expressjs app.locals属性。

基本上,当您连接到 MongoDB 时,您会将数据库实例全局保存在 app.locals 中。然后您可以在您的 route 访问它。

const MongoClient = require("mongodb").MongoClient;
const express = require("express");
const app = express();

const dbName = "database name";

const uri = "mongodb+srv://...";

MongoClient.connect(
uri,
{ useNewUrlParser: true, useUnifiedTopology: true },
(err, client) => {
if (err) {
console.log(err);
throw err;
}

console.log("Connected successfully to Mongodb");

const db = client.db(dbName);

app.locals.db = db;

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));
}
);

app.get("/test", async (req, res) => {
const db = req.app.locals.db;

const users = await db
.collection("users")
.find({})
.toArray();

res.send(users);
});

关于node.js - 我如何使用 Express 构建对 MongoDB 3+ 的获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59212158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com