【问题标题】:Node JS : use mongodb on imported moduleNode JS:在导入的模块上使用 mongodb
【发布时间】:2021-08-29 17:26:10
【问题描述】:

我有一个 app.js 连接到一个 mongodb 数据库并用 express 显示它。我的 app.js 开始变得很长。所以我正在尝试做“模块化设计”。我需要做一个“timer.js”,它会在我的 mongodb 中用计时器做一些事情。

我想从“checking.js”导入这个函数,但是这个文件需要 mongodb,来自 DOTENV 等的一些常量,所以我需要它们之间的导入/导出关系。怎么办?

App.js(主文件)

require('dotenv').config()
const POWER = process.env.POWER;

var mongoDb = require('mongodb');

var mongoClient = mongoDb.MongoClient;

const serverUrl = process.env.ENV_SERVEUR_MONGO_URL;

const useDB = process.env.ENV_MONGO_DATABASE;

app.get('/top', function (req, res) {
    var resultArray = [];

mongoClient.connect(serverUrl, function (err, client) {
        var db = client.db(useDB);
        if (err) throw err;
        var cursor = db.collection('top').find().sort({ _id: -1 });
        cursor.forEach(function (doc, err) {
            resultArray.push(doc);
        }, function () {
            client.close();
            res.render('pages/top', { items: resultArray })
        });
    });
});

var checking = require('./checking')

Checking.js

function checkingdatabase() {
    
// ERROR require mongodb, variable undefined etc.
    mongoClient.connect(serverUrl, function (err, client) {
        var db = client.db(useDB);
        if (err) throw err;
        //do stuff
    });
}

setInterval(checkingActiveOffer, 5000);

module.exports = Object.assign({ checkingdatabase })```

【问题讨论】:

  • 您必须在checking.js中编写所需的导入语句,以便它可以正常工作并编译而不会出现任何错误。

标签: javascript node.js mongodb import module


【解决方案1】:

创建 DB.js 文件并共享 MongoDB 连接

     mongoose.connect(process.env.ENV_SERVEUR_MONGO_URL;, { useFindAndModify: false, useUnifiedTopology: true, useNewUrlParser: true })
    .then(function (res) {
        
        console.log('Succeeded connected to: ' + process.env.ENV_SERVEUR_MONGO_URL;);
        exports.isReady = true;
        exports.connection = res;
        exports.con = res.connection
    })

检查.js

   var db = require('./DB')
   app.get('/top', function (req, res) {
   db.con.collection('top').find().sort({_id:-1}).toArray()
   .then(r=>{
      res.render('pages/top', { items: resultArray })
    })
   })

【讨论】:

    【解决方案2】:

    您可以通过两种不同的方式做到这一点:

    1 - 您将所需的值作为道具传递给 Checking 函数。因此,当您调用 Checking 函数时,您将通过这种方式传递您的环境和您的 mongo 客户端。 不建议

    2 - 您可以并且应该在 Checking 文件中声明您需要的内容。你的 envs 和 mongoClient 可能只是需要,它会让你的代码更干净。

    看看this code,看看它是否适合你的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2022-01-22
      • 2016-07-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      相关资源
      最近更新 更多