javascript - 每第二次运行都会抛出 : MongoError: Topology was destroyed

标签 javascript node.js mongodb typescript express

我正在构建一个 REST API,但每次加载我的网站时,我都会收到 MongoError:拓扑已损坏。有人可以帮我解决这个问题吗?我感觉异步运行有问题。

const client = new MongoClient(apiconfig.mongoUrl, {
    useNewUrlParser: true
});

app.get("/api/:object", (req, res) => {
    mongodb(req.params["object"], async (collection: Collection) => {
        if (collection !== undefined) {
            let result = await collection.find().toArray();
            res.send(result);
        }
        else {
            res.sendStatus(404);
        }
    });
});

const mongodb = (coll: string, operation: (collection: Collection) => Promise<void>) => {
    client.connect((err) => {
        const db = client.db("VaorraJS");
        db.collections().then((collections) => {
            operation(collections.find((collection) => collection.collectionName === coll)).then(() => {
                client.close();
            });
        }).catch((error) => {
            console.log("ERROR: " + error);
        });
    });
}

app.listen(5000);

最佳答案

我建议使用Mongoose

您正在为每个请求创建数据库连接,这不是正确的方法

const MongoClient = require('mongodb').MongoClient;
// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = '<some db>';

// Use connect method to connect to the server
let db;
MongoClient.connect(url, function (err, client) {
    assert.equal(null, err);
    console.log("Connected successfully to server");
    db = client.db(dbName);
});


app.get("/api/:object", async(req, res) => {
    const collection = db.collection(req.params["object"]);
    let result = await collection.find().toArray();
    res.send(result);
});

关于javascript - 每第二次运行都会抛出 : MongoError: Topology was destroyed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55537880/

相关文章:

javascript - 将 javascript 缩小文件压缩为单个文件

javascript - JQuery Ajax 请求未到达服务器

javascript - 如何从邮箱获取 Office 365 Outlook 文件夹名称

javascript - Mongoose 架构 : Forcing an array of objects to be created

javascript - 谷歌应用可视化可以吗?具有缩放选项的时间轴

javascript - 如何从包含日期范围的字符串中提取年份 [Typescript/Angular]

javascript - Node.js:为什么我的预期值没有在 'catch' 子句的 'try-catch' block 中返回?

node.js - 合并 WAV 音频和 WebM 视频

node.js - MongoDB 的奇怪日期行为

mongodb - 如何在 MongoDB 中更改文档属性