নোডজেস অ্যাপ্লিকেশন এবং মডিউলগুলি জুড়ে কিভাবে মোংডবের সাথে সংযোগটি সঠিকভাবে পুনরায় ব্যবহার করবেন


124

আমি পড়তে এবং পড়তে পেরেছি এবং এখনও পুরো নোডজেস অ্যাপ্লিকেশন জুড়ে একই ডাটাবেস (মঙ্গোডিবি) সংযোগটি ভাগ করার সর্বোত্তম উপায় কী তা নিয়ে আমি বিভ্রান্ত। আমি যেমন বুঝতে পারি অ্যাপ্লিকেশন শুরু হয়ে মডিউলগুলির মধ্যে পুনরায় ব্যবহার করা হলে সংযোগটি খোলা থাকা উচিত। আমার সেরা পদ্ধতির বর্তমান ধারণাটি হ'ল server.js(মূল ফাইল যেখানে সমস্ত কিছু শুরু হয়) ডাটাবেসের সাথে সংযুক্ত হয় এবং মডিউলগুলিতে পাস হওয়া অবজেক্ট ভেরিয়েবল তৈরি করে। একবার সংযুক্ত হওয়ার পরে এই পরিবর্তনশীলটি মডিউল কোড দ্বারা প্রয়োজনীয় হিসাবে ব্যবহৃত হবে এবং এই সংযোগটি খোলা থাকবে। উদাহরণ:

    var MongoClient = require('mongodb').MongoClient;
    var mongo = {}; // this is passed to modules and code

    MongoClient.connect("mongodb://localhost:27017/marankings", function(err, db) {
        if (!err) {
            console.log("We are connected");

            // these tables will be passed to modules as part of mongo object
            mongo.dbUsers = db.collection("users");
            mongo.dbDisciplines = db.collection("disciplines");

            console.log("aaa " + users.getAll()); // displays object and this can be used from inside modules

        } else
            console.log(err);
    });

    var users = new(require("./models/user"))(app, mongo);
    console.log("bbb " + users.getAll()); // not connected at the very first time so displays undefined

তারপরে আর একটি মডিউল এর models/userমত দেখাচ্ছে:

Users = function(app, mongo) {

Users.prototype.addUser = function() {
    console.log("add user");
}

Users.prototype.getAll = function() {

    return "all users " + mongo.dbUsers;

    }
}

module.exports = Users;

এখন আমার ভয়াবহ অনুভূতি আছে যে এটি ভুল তাই এই পদ্ধতির সাথে কোনও সুস্পষ্ট সমস্যা আছে এবং যদি হয় তবে কীভাবে এটি আরও ভাল করা যায়?


কয়েকদিন আগে একই ধরণের প্রশ্ন আমি জিজ্ঞাসা করেছি। stackoverflow.com/questions/24547357/…
সালভাদোর ডালি

মঙ্গোয়াবাদক ড্রাইভার পরীক্ষা করুন । এটি " async দিয়ে নির্মিত / মনে রেখে অপেক্ষা করুন " এবং অলসভাবে রফতানি সংযোগের অনুমতি দেয় module.exports = mongoist(connectionString);। ( connectionStringমোঙ্গোডিবি ম্যানুয়াল সম্পর্কে পড়ুন ))
আলেকজান্দ্রার নীল

উত্তর:


150

আপনি একটি mongoUtil.jsমডিউল তৈরি করতে পারেন যা মঙ্গোর সাথে সংযোগ স্থাপন এবং একটি মঙ্গো ডিবি উদাহরণটি উভয়কে ফাংশনযুক্ত করতে পারে:

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

var _db;

module.exports = {

  connectToServer: function( callback ) {
    MongoClient.connect( url,  { useNewUrlParser: true }, function( err, client ) {
      _db  = client.db('test_db');
      return callback( err );
    } );
  },

  getDb: function() {
    return _db;
  }
};

এটি ব্যবহার করতে, আপনি এটিতে এটি করতে app.js:

var mongoUtil = require( 'mongoUtil' );

mongoUtil.connectToServer( function( err, client ) {
  if (err) console.log(err);
  // start the rest of your app here
} );

এবং তারপরে, যখন অন্য কোনও .jsফাইলের মতো আপনার অন্য কোথাও মঙ্গোতে অ্যাক্সেসের প্রয়োজন হবে, আপনি এটি করতে পারেন:

var mongoUtil = require( 'mongoUtil' );
var db = mongoUtil.getDb();

db.collection( 'users' ).find();

এই কাজটি করার কারণটি হ'ল নোডে, মডিউলগুলি যখন requireডি হয় তখন তারা কেবল একবার লোড / সসোর্স হয়ে যায় তাই আপনি কেবলমাত্র একটি উদাহরণ দিয়ে শেষ করতে পারেন _dbএবং mongoUtil.getDb()সর্বদা একই উদাহরণটি ফিরে আসবেন।

দ্রষ্টব্য, কোড পরীক্ষা করা হয়নি।


6
দুর্দান্ত উদাহরণ! তবে আমার একটা প্রশ্ন আছে। একাধিক ক্লাস্টার দিয়ে আপনার অ্যাপ্লিকেশন চালানোর সময় কীভাবে এটি কাজ করবে? এটি সংযোগের অন্য কোনও উদাহরণকে ঘুরিয়ে দেবে বা উত্স থেকে বিদ্যমান সংযোগটি সহজভাবে ব্যবহার করবে?
ফারহান আহমেদ

19
যখন মঙ্গো সংযোগের মধ্যে মারা যায় আপনি কীভাবে মামলাটি পরিচালনা করবেন? নোট অ্যাপ্লিকেশনটি পুনরায় আরম্ভ না করা পর্যন্ত getDb () এর সমস্ত কল ব্যর্থ হবে scenario
অয়ন

4
আমি এই কোডটি চেষ্টা করেছিলাম কিন্তু যখন মঙ্গো ইউটি.লিটজিটিবি () করি তখন আমি বাতিল হয়ে যাই, কেন জানি না।
কেমিং

3
@ কেমিংজেং - আপনার নিশ্চিত করতে হবে যে মঙ্গো ইউটিল ব্যবহার করা সমস্ত মডিউলগুলি app.jsকলব্যাক ফাংশনের মধ্যে আমদানি করা হয়েছে connectToServer। আপনি যদি requireসেগুলিতে app.jsআগে _dbসেট হয়ে থাকেন তবে আপনি অন্যান্য মডিউলগুলিতে অপরিজ্ঞাত ত্রুটি পাবেন।
মাইক আর

2
মঙ্গোডিবি সংস্করণ 4 হিসাবে এটি হওয়া উচিত var database = mongoUtil.getDb(); database.db().collection( 'users' )
জুলিয়ান বীরক্যাম্প

26

জায়গাগুলিতে কনফিগারেশন অবজেক্টগুলি গ্রহণ করার জন্য এটি বেশ কয়েকটি উপায়ে টুইট করা যেতে পারে তবে সামগ্রিকভাবে এটি আরও আধুনিক জেএস সিনট্যাক্স সহ আপনার কোডটি কীভাবে সাজানো হয়েছে তার সমান। প্রোটোটাইপ এবং কলব্যাকগুলিতে সহজেই আবার লেখা যেতে পারে, যদি এটি আপনার প্রয়োজন হয়।

mongo.js

const { MongoClient } = require('mongodb');
const config = require('./config');
const Users = require('./Users');
const conf = config.get('mongodb');

class MongoBot {
  constructor() {
    const url = `mongodb://${conf.hosts.join(',')}`;

    this.client = new MongoClient(url, conf.opts);
  }
  async init() {
    await this.client.connect();
    console.log('connected');

    this.db = this.client.db(conf.db);
    this.Users = new Users(this.db);
  }
}

module.exports = new MongoBot();

Users.js

class User {
  constructor(db) {
    this.collection = db.collection('users');
  }
  async addUser(user) {
    const newUser = await this.collection.insertOne(user);
    return newUser;
  }
}
module.exports = User;

app.js

const mongo = require('./mongo');

async function start() {
  // other app startup stuff...
  await mongo.init();
  // other app startup stuff...
}
start();

someFile.js

const { Users } = require('./mongo');

async function someFunction(userInfo) {
  const user = await Users.addUser(userInfo);
  return user;
}


আমি বুঝতে পেরেছি যে এই উত্তরটি প্রায় এক বছরের পুরানো এবং আমি আরও তথ্যের প্রত্যাশা করি না, তবে এটি এমন পদ্ধতির মতো বলে মনে হয় যা আমি সবচেয়ে বেশি ব্যবহার করতে চাই তবে ধ্বংসপ্রাপ্ত ব্যবহারকারীদের মোংগো ফাইল থেকে বের করে দেওয়ার জন্য আমার শূন্য ভাগ্য রয়েছে। আমার আপনার ফাইলফেজ.জেএস এর সাথে খুব অনুরূপ একটি ফাইল রয়েছে তবে আপনি লাইন 4 এ যেখানে আপনি ইউজার্স.এডডুউসারকে সবসময় আমার জন্য বাজান - বলেন যে ব্যবহারকারীরা অনির্ধারিত। আমি কি অনুপস্থিত একটি স্পষ্ট টুকরা আছে?
রব ই।

আমি একটি নতুন প্রশ্ন তৈরি করে শেষ করেছি কারণ এটি আমাকে এতটা বাগিয়ে দিচ্ছে।
রব ই।

এটি প্রযুক্তিগতভাবে কাজ করা উচিত নয়। প্রথম কলটিতে অবজেক্টের ক্যাশে প্রয়োজন। এই ক্ষেত্রে, এটি কেবল কনস্ট্রাক্টর দ্বারা ফিরিয়ে দেওয়া বস্তুকে ক্যাশে করবে। পরে 'আরআইএন' কল করার পরে কী কী ফিরে আসবে তার কোনও প্রভাব নেই। সুতরাং এই কনস্ট {ব্যবহারকারীদের} = প্রয়োজনীয় ('। / মঙ্গো') ব্যর্থ হওয়া উচিত কারণ ক্যাশেড ফলাফলের কোনও 'ব্যবহারকারীর' সম্পত্তি থাকবে না।
beNerd

প্রযোজনা। ক্যাশে অবজেক্টের জন্য একটি রেফারেন্স সঞ্চয় করে, যা সেই সমস্ত ফাইলের মধ্যে ভাগ করা হয় যা সেই বস্তুর প্রয়োজন হয়। প্রোগ্রামের অন্যান্য অংশগুলি (বা এমনকি আপনি যদি টাইমার ব্যবহার করেন তবে নিজেরাই) থেকে ক্রিয়াকলাপ হতে পারে এমন বস্তুগুলি Ob আপনি নিজেই এটি পরীক্ষা করে দেখতে পারেন, তবে আমি ডেমোতে একসাথে একটি দ্রুত কলম ছুঁড়ে দিয়েছি: কোডস্যান্ডবক্স.আইও
অসাধারণ- জল-

19

গো-ওলেগের উদাহরণের ভিত্তিতে আমি সমসাময়িক বাক্য গঠন সহ এটি কীভাবে করব তা এখানে। খনি পরীক্ষা এবং কার্যকরী হয়।

আমি কোডটিতে কিছু মন্তব্য রেখেছি।

./db/mongodb.js

 const MongoClient = require('mongodb').MongoClient
 const uri = 'mongodb://user:password@localhost:27017/dbName'
 let _db

 const connectDB = async (callback) => {
     try {
         MongoClient.connect(uri, (err, db) => {
             _db = db
             return callback(err)
         })
     } catch (e) {
         throw e
     }
 }

 const getDB = () => _db

 const disconnectDB = () => _db.close()

 module.exports = { connectDB, getDB, disconnectDB }

./index.js

 // Load MongoDB utils
 const MongoDB = require('./db/mongodb')
 // Load queries & mutations
 const Users = require('./users')

 // Improve debugging
 process.on('unhandledRejection', (reason, p) => {
     console.log('Unhandled Rejection at:', p, 'reason:', reason)
 })

 const seedUser = {
     name: 'Bob Alice',
     email: 'test@dev.null',
     bonusSetting: true
 }

 // Connect to MongoDB and put server instantiation code inside
 // because we start the connection first
 MongoDB.connectDB(async (err) => {
     if (err) throw err
     // Load db & collections
     const db = MongoDB.getDB()
     const users = db.collection('users')

     try {
         // Run some sample operations
         // and pass users collection into models
         const newUser = await Users.createUser(users, seedUser)
         const listUsers = await Users.getUsers(users)
         const findUser = await Users.findUserById(users, newUser._id)

         console.log('CREATE USER')
         console.log(newUser)
         console.log('GET ALL USERS')
         console.log(listUsers)
         console.log('FIND USER')
         console.log(findUser)
     } catch (e) {
         throw e
     }

     const desired = true
     if (desired) {
         // Use disconnectDB for clean driver disconnect
         MongoDB.disconnectDB()
         process.exit(0)
     }
     // Server code anywhere above here inside connectDB()
 })

./users/index.js

 const ObjectID = require('mongodb').ObjectID

 // Notice how the users collection is passed into the models
 const createUser = async (users, user) => {
     try {
         const results = await users.insertOne(user)
         return results.ops[0]
     } catch (e) {
         throw e
     }
 }

 const getUsers = async (users) => {
     try {
         const results = await users.find().toArray()
         return results
     } catch (e) {
         throw e
     }
 }

 const findUserById = async (users, id) => {
     try {
         if (!ObjectID.isValid(id)) throw 'Invalid MongoDB ID.'
         const results = await users.findOne(ObjectID(id))
         return results
     } catch (e) {
         throw e
     }
 }

 // Export garbage as methods on the Users object
 module.exports = { createUser, getUsers, findUserById }

আপনার প্রথম স্নিপেটে চেষ্টা করা কি প্রয়োজনীয়? সংযোগ ফাংশন একটি async ফাংশন। নোড স্টাইলের কলব্যাক ব্যবহার করে ইতিমধ্যে ত্রুটি ধরা পড়েছে।
16:48

1
এটি একটি অত্যন্ত পর্যবেক্ষণমূলক প্রশ্ন যা আমি ভালবাসি। আপনি কোডটি যে আবাসে বাস করেন তার নিকটস্থ এটি অধ্যয়ন ছাড়া আমি নিশ্চিত নই। কোড কার্যকর করার সময় এটি সীমিত সংখ্যক পথ নিতে পারে। আপনি এটিতে একটি কাস্টম হ্যান্ডলার রাখতে পারেন এবং এ্যাসিঙ্ক ফাংশনগুলিতে চেষ্টা / ধরা অন্তর্ভুক্ত করার জন্য আমি ডিফল্ট হওয়ায় আমি এটি বেশিরভাগই যুক্ত করেছি। এটি কেবল একটি হুক পয়েন্ট। ভাল প্রশ্ন যদিও। যদি আপনি অতিরিক্ত নোট পান তবে আমি আপডেট করব।
agm1984

প্রতিবার যদি আমি getDB () কল করি তবে এটি নতুন সংযোগ তৈরি করবে, তাই না?
বিনয় পান্ড্য

18

আপনি যদি এক্সপ্রেস ব্যবহার করে থাকেন তবে আপনি এক্সপ্রেস-মঙ্গো-ডিবি মডিউল ব্যবহার করতে পারেন যা আপনাকে অনুরোধ অবজেক্টে ডিবি সংযোগ পেতে দেয়।

ইনস্টল করুন

npm install --save express-mongo-db

server.js

var app = require('express')();

var expressMongoDb = require('express-mongo-db');
app.use(expressMongoDb('mongodb://localhost/test'));

যাত্রাপথ / users.js

app.get('/', function (req, res, next) {
    req.db // => Db object
});

8

গো-ওলেগ মূলত সঠিক, তবে এই দিনগুলিতে আপনি (সম্ভবত) "মংডোব" নিজেই ব্যবহার করতে চান না, বরং কিছু ফ্রেমওয়ার্ক ব্যবহার করুন, যা আপনার জন্য "নোংরা কাজ" করবে।

উদাহরণস্বরূপ, মঙ্গুজ অন্যতম সাধারণ। আমাদের প্রাথমিক server.jsফাইলটিতে এটিই রয়েছে :

const mongoose = require('mongoose');
const options = {server: {socketOptions: {keepAlive: 1}}};
mongoose.connect(config.db, options);

এটি সেট আপ করার জন্য যা প্রয়োজন তা হ'ল এটি। এখন এটি আপনার কোডের যে কোনও জায়গায় ব্যবহার করুন

const mongoose = require('mongoose');

এবং আপনি যে উদাহরণটি সেট আপ সঙ্গে পেতে mongoose.connect


1
মঙ্গুজ একটি ওআরএম। পড়ুন এই একই জন্য সম্ভব ফাঁদ সম্পর্কে জানা। সন্দেহ নেই যে ওআরএম এর উন্নত এবং শেখার প্রক্রিয়া করার জন্য ব্যবহৃত হয় তবে উত্পাদনের জন্য নয়। কেবল এটি মনে রাখবেন
সারস আর্য

1
মঙ্গুজেরও স্কিমা দরকার। আমি নিও 4 জয়ের সাথে বহুগ্লট অধ্যবসায়ের অংশ হিসাবে মঙ্গোডিবি প্যাকেজটি ব্যবহার করছি, সুতরাং প্রয়োজনীয় হিসাবে নথির বৈশিষ্ট্যগুলি সংজ্ঞায়িত করা ভাল।
agm1984

7

প্রতিশ্রুতি হিসাবে সংযোগটি শুরু করুন:

const MongoClient = require('mongodb').MongoClient
const uri = 'mongodb://...'
const client = new MongoClient(uri)
const connection = client.connect() // initialized connection

এবং তারপরে আপনি যখনই ডাটাবেসে কোনও ক্রিয়া সম্পাদন করতে চান তখন এই সংযোগটি কল করুন:

    // if I want to insert into the database...
    const connect = connection
    connect.then(() => {
        const doc = { id: 3 }
        const db = client.db('database_name')
        const coll = db.collection('collection_name')
        coll.insertOne(doc, (err, result) => {
            if(err) throw err
        })
    })

7

গৃহীত উত্তরের উপর ভিত্তি করে একটি পরীক্ষিত সমাধান:

mongodbutil.js:

var MongoClient = require( 'mongodb' ).MongoClient;
var _db;
module.exports = {
  connectToServer: function( callback ) {
    MongoClient.connect( "<connection string>", function( err, client ) {
      _db = client.db("<collection name>");
      return callback( err );
    } );
  },
  getDb: function() {
    return _db;
  }
};

app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

var mongodbutil = require( './mongodbutil' );
mongodbutil.connectToServer( function( err ) {
  //app goes online once this callback occurs
  var indexRouter = require('./routes/index');
  var usersRouter = require('./routes/users');
  var companiesRouter = require('./routes/companies');
  var activitiesRouter = require('./routes/activities');
  var registerRouter = require('./routes/register');  
  app.use('/', indexRouter);
  app.use('/users', usersRouter);
  app.use('/companies', companiesRouter);
  app.use('/activities', activitiesRouter);
  app.use('/register', registerRouter);  
  // catch 404 and forward to error handler
  app.use(function(req, res, next) {
    next(createError(404));
  });
  // error handler
  app.use(function(err, req, res, next) {
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};
    res.status(err.status || 500);
    res.render('error');
  });
  //end of calback
});

module.exports = app;

কার্যক্রম.js - একটি রুট:

var express = require('express');
var router = express.Router();
var mongodbutil = require( '../mongodbutil' );
var db = mongodbutil.getDb();

router.get('/', (req, res, next) => {  
    db.collection('activities').find().toArray((err, results) => {
        if (err) return console.log(err)
            res.render('activities', {activities: results, title: "Activities"})
    });
});

router.post('/', (req, res) => {
  db.collection('activities').save(req.body, (err, result) => {
    if (err) return console.log(err)
    res.redirect('/activities')
  })
});

module.exports = router;

এই উত্তরটি সম্পূর্ণ এবং কার্যক্ষম।
আহমদ শরীফ

7

2020-এ আমার সেটআপ এখানে রয়েছে:

./utils/database.js

const { MongoClient } = require('mongodb');

class Mongo {
    constructor () {
        this.client = new MongoClient("mongodb://127.0.0.1:27017/my-app", {
            useNewUrlParser: true,
            useUnifiedTopology: true
        });
    }

    async main () {
        await this.client.connect();
        console.log('Connected to MongoDB');

        this.db = this.client.db();
    }
}

module.exports = new Mongo();

/app.js

const mongo = require('./utils/database');
const express = require('express');

const app = express();

const boot = async () => {
    await mongo.main();
    app.listen(3000);
};

boot();

3

আমরা dbconnection.js এর মতো একটি ডিবি সংযোগ ফাইল তৈরি করতে পারি

const MongoClient = require('mongodb').MongoClient
const mongo_url = process.env.MONGO_URL;

    module.exports = {
        connect: async function(callback) {
            var connection;
            await new Promise((resolve, reject) => {
                MongoClient.connect(mongo_url, {
                    useNewUrlParser: true
                }, (err, database) => {
                    if (err)
                        reject();
                    else {
                        connection = database;
                        resolve();
                    }
                });
            });
            return connection;
        }

    };

এবং তারপরে আপনার অ্যাপ্লিকেশনটিতে এই ফাইলটি ব্যবহার করুন

var connection = require('../dbconnection');

এবং তারপরে আপনার অ্যাসিঙ্ক ফাংশনের ভিতরে এটি ব্যবহার করুন

db  = await connection.connect();

আশা করি এটি কাজ করবে


2

আমি এর জন্য কিছুটা দেরি করেছি, তবে আমি আমার সমাধানটিও যুক্ত করব। এখানে উত্তরগুলির তুলনায় এটি অনেক ছোট পদ্ধতির।

যাইহোক আপনি মঙ্গোডিবি সংস্করণ 4.0 এবং নোড.জেএস 3.0 (বা উচ্চতর সংস্করণ) ব্যবহার করছেন তবে আপনি এর isConnected()থেকে ফাংশনটি ব্যবহার করতে পারেন MongoClient

const MongoClient = require('mongodb').MongoClient;
const uri = "<your connection url>";
const client = new MongoClient(uri, { useNewUrlParser: true });

if (client.isConnected()) {
  execute();
} else {
  client.connect().then(function () {
    execute();
  });
}

function execute() {
    // Do anything here
    // Ex: client.db("mydb").collection("mycol");
}

এটি আমার পক্ষে ভাল কাজ করেছে। আশা করি এটা সাহায্য করবে.


2

আমি পার্টিতে দেরি করেছি, তবে আশা করি এই উত্তরটি কাউকে সহায়তা করবে, এটি একটি কার্যকরী কোড:

db.js

const MongoClient = require("mongodb").MongoClient
const urlMongo = "mongodb://localhost:27017"

var db;

function connectToServer( callback ) {
    MongoClient.connect(urlMongo,  { useUnifiedTopology: true , useNewUrlParser: true }, function( err, client ) {
        db  = client.db('auth');
        return callback( err );
    })
}

function getDb() {
    return db
}

module.exports = {connectToServer, getDb}

আমরা একটি ফাংশন রফতানি করি মঙ্গোতে সংযোগ করতে এবং অন্যটি সংযোগের উদাহরণ পেতে।

app.js

const express = require('express')
const app = express()

const mongo = require('./db.js');

mongo.connectToServer( function( err) {
  if (err) console.log(err);
  const auth = require('./modulos')

  app.post('/login', (req, res) => { auth.login(req, res)})
  app.listen(3000, function () { console.log('Corriendo en puerto 3000')})

});

আমরা সংযোগটি আরম্ভ করার পরে আমাদের অবশ্যই অথ মডিউলটির প্রয়োজনীয়তাটি করা উচিত, অন্যথায় getDb ফাংশনটি অপরিবর্তিত হবে ined

module.js

const db = require('../db.js').getDb()
const usuariosCollection = db.collection('usuarios')

function login(req, res){
    usuariosCollection.find({ 'username': 'Fran' }).toArray(function (err, doc) {
        ...
    })
}

2

এটি যেমন এক্সপ্রেসের সাথে ট্যাগ করা হয়েছে, আমি ভেবেছিলাম যে আমি উল্লেখ করব যে এক্সপ্রেসের রুটের মধ্যে ডেটা ভাগ করার জন্য একটি বিল্ট ইন বৈশিষ্ট্য রয়েছে। App.locals নামে একটি অবজেক্ট রয়েছে। আমরা এটিতে বৈশিষ্ট্যগুলি সংযুক্ত করতে পারি এবং আমাদের রুটের অভ্যন্তর থেকে এটি অ্যাক্সেস করতে পারি। আপনি কেবল আপনার অ্যাপ্লিকেশন.জেএস ফাইলে আপনার মঙ্গো সংযোগটি ইনস্ট্যান্ট করুন।

var app = express();

MongoClient.connect('mongodb://localhost:27017/')
.then(client =>{
  const db = client.db('your-db');
  const collection = db.collection('your-collection');
  app.locals.collection = collection;
});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // view engine setup
app.set('views', path.join(__dirname, 'views'));

অতিরিক্ত মডিউল তৈরি এবং প্রয়োজনীয়তা ছাড়াই এই ডাটাবেস সংযোগটি এখন নীচে হিসাবে আপনার রুটগুলির মধ্যে অ্যাক্সেস করা যেতে পারে।

app.get('/', (req, res) => {
  const collection = req.app.locals.collection;
  collection.find({}).toArray()
  .then(response => res.status(200).json(response))
  .catch(error => console.error(error));
});

এই পদ্ধতিটি নিশ্চিত করে যে আপনার অ্যাপ্লিকেশনটির সময়কালের জন্য আপনার কাছে একটি ডেটাবেস সংযোগ খোলা আছে যদি না আপনি এটি যে কোনও সময় বন্ধ করতে বেছে নেন। এটি সহজেই অ্যাক্সেসযোগ্য req.app.locals.your-collectionএবং অতিরিক্ত মডিউলগুলির প্রয়োজন নেই।


আমি এটি সবচেয়ে পরিষ্কার পদ্ধতি খুঁজে। আমাদের এই পদ্ধতির জন্য কোনও সম্ভাব্য ত্রুটি আছে? আমি এটি ব্যবহার করছি এবং আমার কাছে বেশ ভাল লাগছে, আমার শেখা ভাগ করে নেবে।
প্রিয়া রঞ্জন সিং

@ প্রিয়ারঞ্জনসিংহ সত্যি কথা বলতে, আমি কোনও ত্রুটিগুলি সম্পর্কে জানি না, তবে আমি কোনওভাবেই এ সম্পর্কে বিশেষজ্ঞ নই। আমি অন্যান্য পদ্ধতি অবিস্মরণীয়ভাবে খুঁজে পেয়েছি এবং এই গবেষণার পরে আমি এই পদ্ধতিটি আবিষ্কার করেছিলাম এবং নিজের সুবিধার জন্য আমি আরও পরিষ্কার বোঝার কোডটি পেয়েছিলাম। আশা করি আমার থেকে বেশি জ্ঞানী কেউ যদি কোনও ত্রুটি থাকে তবে তা হাইলাইট করতে সক্ষম হবেন now আমি কিছুক্ষণ ছাড়াই এই পদ্ধতিটি ব্যবহার করে চলেছি এবং মনে হয় এটি ভালভাবে কাজ করছে।
হপপো

1

আপনি যদি নিজের অ্যাপ্লিকেশনটিতে মঙ্গুজ ব্যবহারের বিকল্প বেছে নেন তবে নীচের স্নিপেটের সাথে আপনার অ্যাপ্লিকেশন.জেএস ফাইলটি সম্পাদনা করুন

app.js

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/Your_Data_Base_Name', {useNewUrlParser:true})
  .then((res) => {
    console.log(' ########### Connected to mongDB ###########');
  })
  .catch((err) => {
    console.log('Error in connecting to mongoDb' + err);
  });`

পরবর্তী পদক্ষেপ: আপনার আবেদনের জন্য মডেলগুলি সংজ্ঞায়িত করুন এবং উদাহরণস্বরূপ সরাসরি CRUD অপারেশন করুন perform

blogSchema.js

 const mongoose = require('mongoose');
 const Schema = mongoose.Schema;
 const blogSchema = new Schema({
     _id : mongoose.Schema.Types.ObjectId,
     title : {
        type : 'String',
        unique : true,
        required : true       
    },
    description : String,
        comments : [{type : mongoose.Schema.Types.ObjectId, ref: 'Comment'}]
 });
 module.exports = mongoose.model('Blog', blogSchema);

UseBlog.js ব্যবহার করুন

const Blog = require('../models/blogSchema');
exports.createBlog = (req, res, next) => {
const blog = new Blog({
  _id : new mongoose.Types.ObjectId,
  title : req.body.title,
  description : req.body.description,
});
blog.save((err, blog) => {
  if(err){
    console.log('Server Error save fun failed');
    res.status(500).json({
      msg : "Error occured on server side",
      err : err
    })
  }else{
    //do something....
  }

আপনার সবসময় মোগোডিবিতে সংযুক্ত হওয়ার দরকার নেই ....


1
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/';
var Pro1;

module.exports = {
    DBConnection:async function()
    {
        Pro1 = new Promise(async function(resolve,reject){
            MongoClient.connect(url, { useNewUrlParser: true },function(err, db) {
                if (err) throw err;
                resolve(db);
            });        
        });
    },
    getDB:async function(Blockchain , Context)
    {
        bc = Blockchain;
        contx = Context;
        Pro1.then(function(_db)
        {
            var dbo = _db.db('dbname');
            dbo.collection('collectionname').find().limit(1).skip(0).toArray(function(err,result) {
                if (err) throw err;
                console.log(result);
            });
        });
    },
    closeDB:async function()
    {
        Pro1.then(function(_db){
            _db.close();
        });
    }
};

1
আপনি একটি সংক্ষিপ্ত বিবরণ যোগ করতে পারেন?
RtmY

1
const express = require('express')
const server = express()
const mongoClient = require('./MongoDB.js').client
const port = 3000
;(async () => {
    await mongoClient.connect()
    server.listen(port, () => console.log(`Server is listening on port ${port}!`))
})().catch(console.error)

0

আমি এটি ভাল কাজ খুঁজে পাচ্ছি :)

mongoUtil.ts

import { MongoClient } from 'mongodb';
const uri =
  'MONGOSTRING';

let connPoolPromise: any = null;

const mongoPoolPromise = () => {
  if (connPoolPromise) return connPoolPromise;

  connPoolPromise = new Promise((resolve, reject) => {
    const conn = new MongoClient(uri, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });

    if (conn.isConnected()) {
      return resolve(conn);
    } else {
      conn
        .connect()
        .then(() => {
          return resolve(conn.db('DATABASENAME'));
        })
        .catch(err => {
          console.log(err);
          reject(err);
        });
    }
  });

  return connPoolPromise;
};

export = {
  mongoPoolPromise,
};

anyFile.ts

const { mongoPoolPromise } = require('./mongoUtil');

async function getProducts() {
  const db = await mongoPoolPromise();
  const data = await db
    .collection('myCollection')
    .find({})
    .toArray();
  console.log(data);
  return data;
}

export { getProducts };

উত্তরটি ট্যাগযুক্ত javascript, কোনও টাইপস্ক্রিপ্ট উত্তর উপযুক্ত বলে মনে করবেন না।
কেপপোগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.