আমি কোনও নোড.জেএস ওয়েব অ্যাপ্লিকেশনে মঙ্গোডিবি সংযোগগুলি কীভাবে পরিচালনা করব?


288

আমি একটি ওয়েবসাইট লেখার জন্য মংডোডিবি সহ নোড-মংডোব-নেটিভ ড্রাইভারটি ব্যবহার করছি ।

সংযোগগুলি পরিচালনা করার পদ্ধতি সম্পর্কে আমার কিছু প্রশ্ন রয়েছে:

  1. সমস্ত অনুরোধের জন্য কেবল একটি মঙ্গোডিবি সংযোগ ব্যবহার করা কি যথেষ্ট? কোন কার্যকারিতা সমস্যা আছে? যদি তা না হয় তবে পুরো অ্যাপ্লিকেশনটিতে ব্যবহারের জন্য আমি কী বিশ্বব্যাপী সংযোগ স্থাপন করতে পারি?

  2. যদি তা না হয়, আমি অনুরোধটি উপস্থিত হওয়ার সাথে সাথে একটি নতুন সংযোগটি খুলি এবং অনুরোধটি পরিচালনা করার পরে এটি বন্ধ করে দেওয়া কি ভাল? কোনও সংযোগ খোলা এবং বন্ধ করা কি ব্যয়বহুল?

  3. আমার কি বিশ্বব্যাপী সংযোগ পুল ব্যবহার করা উচিত? শুনেছি ড্রাইভারের একটি নেটিভ সংযোগ পুল রয়েছে। এটি একটি ভাল পছন্দ?

  4. আমি যদি কোনও সংযোগ পুল ব্যবহার করি তবে কত সংযোগ ব্যবহার করা উচিত?

  5. আমার কি অন্যান্য বিষয় লক্ষ্য করা উচিত?


@ আয়নিকবিজাউ, দুঃখিত, আমি দীর্ঘদিন ধরে নোডেজ ব্যবহার করি নি যা আমি দেখিনি। আপনার মন্তব্যের জন্য ধন্যবাদ ~
ফ্রিউইন্ড

উত্তর:


459

নোড-মংডোব-নেটিভের প্রাথমিক প্রতিশ্রুতিবিদ বলেছেন :

আপনার অ্যাপ্লিকেশন বুট হয়ে গেলে আপনি একবার ডিএনজি অবজেক্টটি পুনরায় ব্যবহার করুন এবং মংগক্লিয়েন্টকোনেক্টটি খুলুন। এটি প্রতিটি সিঙ্গলটন সংযোগ পুল নয়। সংযোগ একটি নতুন সংযোগ পুল তৈরি করে।

সুতরাং, আপনার প্রশ্নের সরাসরি উত্তর দিতে, db অবজেক্টটি পুনরায় ব্যবহার করুন যা ফলাফলMongoClient.connect() । এটি আপনাকে পুলিং দেয় এবং প্রতিটি ডিবি ক্রিয়ায় খোলার / বন্ধ হওয়ার সংযোগের তুলনায় একটি লক্ষণীয় গতি বৃদ্ধি সরবরাহ করবে।


3
মঙ্গোস্লায়েন্ট.কোনেক্টের লিঙ্ক () মংডোড.বিথিউথ.আই.ও
নোড- মঙ্গোডব-

4
এটা সঠিক উত্তর. গৃহীত উত্তরটি খুব ভুল কারণ এটি প্রতিটি অনুরোধের জন্য একটি সংযোগ পুল খুলতে এবং তারপরে এটি করার পরে এটি বন্ধ করে দেওয়ার কথা বলে। ভয়াবহ স্থাপত্য।
শরণশ মহাপাত্র

7
এটি একটি সঠিক উত্তর। আমার imagineশ্বর কল্পনা করুন যে আমাকে প্রতিবার খুলতে এবং বন্ধ করতে হবে যখন আমি এমন কিছু করি যা কেবল আমার সন্নিবেশগুলির জন্য প্রতি ঘন্টা 350K হয়! এটা আমার নিজের সার্ভার আক্রমণ করার মত।
মাজিয়ার

1
@ ক্র্যাকার: আপনার কাছে এক্সপ্রেস অ্যাপ্লিকেশন থাকলে আপনি req.dbএই মিডলওয়্যারটির সাহায্যে ডিবি অবজেক্টটি সংরক্ষণ করতে পারেন : github.com/floatroid/express-mongo-db
8-15 ই

1
যদি একাধিক ডাটাবেস থাকে .. আমি কি প্রতিটি ডাটাবেসের জন্য একটি সংযোগটি একসাথে খোলাম? যদি তা না হয়, প্রয়োজন হলে খোলার এবং বন্ধ করা কি ঠিক আছে?
আমান গুপ্ত

45

নোড.জেএস অ্যাপ্লিকেশন শুরু হয়ে গেলে একটি নতুন সংযোগ খুলুন এবং বিদ্যমান dbসংযোগ অবজেক্টটি পুনরায় ব্যবহার করুন :

/server.js

import express from 'express';
import Promise from 'bluebird';
import logger from 'winston';
import { MongoClient } from 'mongodb';
import config from './config';
import usersRestApi from './api/users';

const app = express();

app.use('/api/users', usersRestApi);

app.get('/', (req, res) => {
  res.send('Hello World');
});

// Create a MongoDB connection pool and start the application
// after the database connection is ready
MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => {
  if (err) {
    logger.warn(`Failed to connect to the database. ${err.stack}`);
  }
  app.locals.db = db;
  app.listen(config.port, () => {
    logger.info(`Node.js app is listening at http://localhost:${config.port}`);
  });
});

/api/users.js

import { Router } from 'express';
import { ObjectID } from 'mongodb';

const router = new Router();

router.get('/:id', async (req, res, next) => {
  try {
    const db = req.app.locals.db;
    const id = new ObjectID(req.params.id);
    const user = await db.collection('user').findOne({ _id: id }, {
      email: 1,
      firstName: 1,
      lastName: 1
    });

    if (user) {
      user.id = req.params.id;
      res.send(user);
    } else {
      res.sendStatus(404);
    }
  } catch (err) {
    next(err);
  }
});

export default router;

উত্স: একটি নোড.জেএস / এক্সপ্রেস অ্যাপে ডাটাবেস সংযোগগুলি কীভাবে খুলবেন


1
এটি একটি ডাটাবেস সংযোগ তৈরি করে ... আপনি যদি পুলগুলি ব্যবহার করতে চান তবে আপনাকে প্রতিটি ব্যবহার তৈরি করতে / বন্ধ করতে হবে
amcdnl

15
অফ-টপিক, এটি আমার মধ্যে দেখা সবচেয়ে আজব নোডজেএস ফাইল।
শখের শখের

1
এর আগে অ্যাপ.লোকালের কথা আগে কখনও শুনেনি, তবে আমি আনন্দিত যে আপনি আমাকে এখানে তাদের সাথে পরিচয় করিয়ে দিয়েছেন
Z_z_Z

1
আমাকে অনেক সাহায্য করেছে! প্রতিটি অনুরোধের জন্য আমি ডিবি সংযোগ তৈরি / বন্ধ করতে ভুল করি, এটির সাথে আমার অ্যাপ্লিকেশনটির পারফরম্যান্স হ্রাস পেয়েছে।
লেয়ানড্রো লিমা

18

এখানে এমন কিছু কোড রয়েছে যা আপনার মঙ্গোডিবি সংযোগগুলি পরিচালনা করবে।

var MongoClient = require('mongodb').MongoClient;
var url = require("../config.json")["MongoDBURL"]

var option = {
  db:{
    numberOfRetries : 5
  },
  server: {
    auto_reconnect: true,
    poolSize : 40,
    socketOptions: {
        connectTimeoutMS: 500
    }
  },
  replSet: {},
  mongos: {}
};

function MongoPool(){}

var p_db;

function initPool(cb){
  MongoClient.connect(url, option, function(err, db) {
    if (err) throw err;

    p_db = db;
    if(cb && typeof(cb) == 'function')
        cb(p_db);
  });
  return MongoPool;
}

MongoPool.initPool = initPool;

function getInstance(cb){
  if(!p_db){
    initPool(cb)
  }
  else{
    if(cb && typeof(cb) == 'function')
      cb(p_db);
  }
}
MongoPool.getInstance = getInstance;

module.exports = MongoPool;

আপনি সার্ভারটি শুরু করার পরে কল করুন initPool

require("mongo-pool").initPool();

তারপরে অন্য যে কোনও মডিউলে আপনি নিম্নলিখিতটি করতে পারেন:

var MongoPool = require("mongo-pool");
MongoPool.getInstance(function (db){
    // Query your MongoDB database.
});

এটি উপর ভিত্তি করে মঙ্গোডিবি ডকুমেন্টেশনের । এটি একবার দেখুন।


3
5.x থেকে আপডেট: var বিকল্প = {সংখ্যাঅফ্রিজারিজ: 5, স্বতঃআপন সংযোগ: সত্য, পুলসাইজ: 40, কানেক্টটাইমআউটএমএস: 30000};
ব্লেয়ার

15

একক স্ব-অন্তর্ভুক্ত মডিউলটিতে মঙ্গো সংযোগ পুলগুলি পরিচালনা করুন। এই পদ্ধতির দুটি সুবিধা প্রদান করে। প্রথমত এটি আপনার কোডটিকে মডুলার এবং পরীক্ষার জন্য সহজ রাখে। দ্বিতীয়ত আপনার অনুরোধ অবজেক্টে আপনার ডাটাবেস সংযোগটি মেশাতে বাধ্য করা হয়নি যা কোনও ডাটাবেস সংযোগের জন্য নয়। (জাভাস্ক্রিপ্টের প্রকৃতি বিবেচনা করে আমি লাইব্রেরি কোড দ্বারা নির্মিত কোনও জিনিসে কোনও মিশ্রণ করা অত্যন্ত বিপজ্জনক বিবেচনা করব)। সুতরাং এটির সাথে আপনাকে কেবল এমন একটি মডিউল বিবেচনা করতে হবে যা দুটি পদ্ধতি রপ্তানি করে। connect = () => Promiseএবংget = () => dbConnectionObject

এই ধরনের একটি মডিউল দিয়ে আপনি প্রথমে ডাটাবেসের সাথে সংযোগ করতে পারেন

// runs in boot.js or what ever file your application starts with
const db = require('./myAwesomeDbModule');
db.connect()
    .then(() => console.log('database connected'))
    .then(() => bootMyApplication())
    .catch((e) => {
        console.error(e);
        // Always hard exit on a database connection error
        process.exit(1);
    });

ফ্লাইটে যখন আপনার অ্যাপ্লিকেশনটি get()যখন কোনও ডিবি সংযোগের প্রয়োজন হয় তখন কেবল কল করতে পারে ।

const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example  simple

আপনি যদি আপনার ডিবি মডিউলটিকে নিম্নোক্তভাবে একইভাবে সেট আপ করেন তবে আপনার কাছে এটি নিশ্চিত করার একটি উপায় থাকবে যে আপনার ডাটাবেস সংযোগ না থাকলে আপনার অ্যাপ্লিকেশনটি বুট হবে না যে আপনার ডাটাবেস সংযোগ পুল অ্যাক্সেস করার বিশ্বব্যাপী উপায় রয়েছে যা ত্রুটিযুক্ত হবে আপনি যদি সংযোগ না পেয়ে থাকেন।

// myAwesomeDbModule.js
let connection = null;

module.exports.connect = () => new Promise((resolve, reject) => {
    MongoClient.connect(url, option, function(err, db) {
        if (err) { reject(err); return; };
        resolve(db);
        connection = db;
    });
});

module.exports.get = () => {
    if(!connection) {
        throw new Error('Call connect first!');
    }

    return connection;
}

খুব দরকারী, ঠিক আমি যা খুঁজছিলাম!
আগুই

আরও ভাল, আপনি সংযোগ () ফাংশনটি থেকে মুক্তি পেতে পারেন এবং সংযোগটি বাতিল হয়ে গেছে কিনা তা জানতে () ফাংশন চেক করতে পারেন এবং এটি যদি আপনার জন্য কানেক্ট হয় তবে তা কল করুন। () সর্বদা একটি প্রতিশ্রুতি ফিরে পান। এইভাবে আমি আমার সংযোগটি পরিচালনা করি এবং এটি দুর্দান্ত কাজ করে। এটি সিঙ্গলটন প্যাটার্নের ব্যবহার।
java-addict301

@ java-addict301 যদিও এই পদ্ধতির আরও প্রবাহিত এপিআই সরবরাহ করে না তবে এতে দুটি ত্রুটি রয়েছে। প্রথমটি হচ্ছে সংযোগ ত্রুটিগুলি পরীক্ষা করার কোনও নির্ধারিত উপায় নেই। যখনই আপনি কল পাবেন তখন আপনাকে এই ইনলাইনটি সর্বত্র হ্যান্ডেল করতে হবে। আমি ডাটাবেস সংযোগের সাথে প্রথম দিকে ব্যর্থ হতে চাই এবং সাধারণত আমি অ্যাপ্লিকেশনটিকে ডাটাবেসের সাথে সংযোগ স্থাপন করতে দেব না। অন্য ইস্যুটি হ'ল থ্রুটপুট। আপনার অ্যাক্টিভ সংযোগ না থাকার কারণে প্রথম পেতে () কলটিতে আপনার কিছুটা বেশি অপেক্ষা করতে হতে পারে যা আপনার নিয়ন্ত্রণে থাকবে না। আপনার প্রতিবেদনের মেট্রিকগুলি স্কিউ করতে পারে।
স্টুয়ার্ট

1
@ স্টেটওয়ার্ট আমি যেভাবে অ্যাপ্লিকেশন / পরিষেবাদি গঠন করি তা হ'ল সাধারণত প্রারম্ভের সময় ডাটাবেস থেকে একটি কনফিগারেশন পুনরুদ্ধার করা। এইভাবে, ডাটাবেস অ্যাক্সেসযোগ্য হলে অ্যাপ্লিকেশনটি আরম্ভ করতে ব্যর্থ হবে। এছাড়াও, কারণ প্রথম অনুরোধটি সর্বদা শুরুতে থাকে, এই নকশার সাথে মেট্রিকগুলিতে কোনও সমস্যা নেই। এছাড়াও সংযোগ ব্যতিক্রম পুনরায় ছড়িয়ে দিয়ে সিঙ্গেলটনে একবারে সংযোগ স্থাপন করতে পারে না এমন একটি পরিষ্কার ত্রুটি রয়েছে। যেহেতু অ্যাপ্লিকেশনটিকে যেভাবেই সংযোগটি ব্যবহার করার সময় ডাটাবেসের ত্রুটিগুলি ধরা দরকার, সুতরাং এটি কোনও অতিরিক্ত ইনলাইন হ্যান্ডলিংয়ের দিকে যায় না।
java-addict301

2
হাই @ আয়ান এখানে লক্ষণীয় যে এখানে আমরা কল করার সময় আমরা get()একটি সংযোগ পুল পাচ্ছি একটি সংযোগ নয়। একটি সংযোগ পুল, যার নাম থেকেই বোঝা যাচ্ছে এটি ডাটাবেস সংযোগগুলির একটি যৌক্তিক সংগ্রহ। পুলটিতে কোনও সংযোগ না থাকলে ড্রাইভার একটি খোলার চেষ্টা করবে। একবার সংযোগটি চালু হয়ে গেলে এটি ব্যবহৃত হয় এবং তা পুলটিতে ফিরে আসে। পরের বার যখন পুলটি অ্যাক্সেস করা হয় তখন এই সংযোগটি পুনরায় ব্যবহৃত হতে পারে। এখানে সুন্দর জিনিসটি হল পুলটি আমাদের জন্য আমাদের সংযোগগুলি পরিচালনা করবে সুতরাং যদি কোনও সংযোগটি বাদ পড়ে যায় তবে আমরা কখনও জানতে পারি না যে পুলটি আমাদের জন্য একটি নতুন উন্মুক্ত করবে।
স্টুয়ার্ট

11

যদি আপনার এক্সপ্রেস.জে থাকে তবে আপনি পুল ছাড়াই অনুরোধগুলির মধ্যে মঙ্গোডিবি সংযোগটি ক্যাচিং এবং ভাগ করে নেওয়ার জন্য এক্সপ্রেস-মঙ্গো-ডিবি ব্যবহার করতে পারেন (যেহেতু স্বীকৃত উত্তর বলে যে এটি সংযোগটি ভাগ করার সঠিক উপায়)।

যদি তা না হয় - আপনি এর উত্স কোডটি দেখতে এবং এটি অন্য ফ্রেমওয়ার্কে ব্যবহার করতে পারেন।


6

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

https://github.com/coopernurse/node-pool


মোঙ্গো ইতিমধ্যে ড্রাইভারে সংযোগ পুলিং করে, আমি তবে আমার মঙ্গো সংযোগগুলিকে একটি ইন্টারফেসে ম্যাপ করেছি যা নোড-পুলের সাথে মেলে, এইভাবে আমার সমস্ত সংযোগ একই প্যাটার্ন অনুসরণ করে, যদিও মঙ্গোর ক্ষেত্রে, ক্লিনআপটি না আসলে কিছু ট্রিগার।
ট্র্যাকার 1

4

আপনার পরিষেবা হিসাবে কোনও সংযোগ তৈরি করা উচিত এবং প্রয়োজনে এটি পুনরায় ব্যবহার করুন।

// db.service.js
import { MongoClient } from "mongodb";
import database from "../config/database";

const dbService = {
  db: undefined,
  connect: callback => {
    MongoClient.connect(database.uri, function(err, data) {
      if (err) {
        MongoClient.close();
        callback(err);
      }
      dbService.db = data;
      console.log("Connected to database");
      callback(null);
    });
  }
};

export default dbService;

আমার App.js নমুনা

// App Start
dbService.connect(err => {
  if (err) {
    console.log("Error: ", err);
    process.exit(1);
  }

  server.listen(config.port, () => {
    console.log(`Api runnning at ${config.port}`);
  });
});

এবং আপনি যেখানে চান সেখানে এটি ব্যবহার করুন

import dbService from "db.service.js"
const db = dbService.db

1
মঙ্গো যদি সংযোগ করতে না পারে তবে মঙ্গো ক্লায়েন্ট.ক্লস () একটি ত্রুটি দেয়। তবে মূল সমস্যার জন্য একটি ভাল সমাধান।
হিমাংশু

3

http://mongoosejs.com/docs/api.html

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


নেটিভ mongodb সংযোজকের জন্য মূল inal ।
কোডফিনিটি

2

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

/* Mongo.js*/

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/yourdatabasename"; 
var assert = require('assert');

var connection=[];
// Create the database connection
establishConnection = function(callback){

                MongoClient.connect(url, { poolSize: 10 },function(err, db) {
                    assert.equal(null, err);

                        connection = db
                        if(typeof callback === 'function' && callback())
                            callback(connection)

                    }

                )



}

function getconnection(){
    return connection
}

module.exports = {

    establishConnection:establishConnection,
    getconnection:getconnection
}

/*app.js*/
// establish one connection with all other routes will use.
var db = require('./routes/mongo')

db.establishConnection();

//you can also call with callback if you wanna create any collection at starting
/*
db.establishConnection(function(conn){
  conn.createCollection("collectionName", function(err, res) {
    if (err) throw err;
    console.log("Collection created!");
  });
};
*/

// anyother route.js

var db = require('./mongo')

router.get('/', function(req, res, next) {
    var connection = db.getconnection()
    res.send("Hello");

});

1

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

  1. আপনার সার্ভার.জেএস-এ সংশ্লেষিত ওয়ার্ল্ড.ডাবকনেকশনগুলি = [];

  2. পরিষেবাদির নাম সংযোগসেসওয়ার.জেএস তৈরি করুন। এটিতে দুটি পদ্ধতি getConnication এবং createConnection থাকবে। সুতরাং যখন ব্যবহারকারী getConnication () কল করবেন, এটি বিশ্বব্যাপী সংযোগ পরিবর্তনশীল এবং রিটার্ন সংযোগের বিশদটি ইতিমধ্যে উপস্থিত থাকলে অন্যটি জানতে পারে এটি ক্রিয়েট কানেকশন () এবং রিটার্ন সংযোগের বিশদটি কল করবে।

  3. ডিবি_নাম ব্যবহার করে এই পরিষেবাটিতে কল করুন এবং এটি ইতিমধ্যে যদি নতুন সংযোগ তৈরি করে আপনাকে এটি ফিরিয়ে দেয় তবে এটি সংযোগ অবজেক্টটি ফিরিয়ে দেবে।

আশা করি এটা সাহায্য করবে :)

সংযোগসেবা.এসএস কোডটি এখানে:

var mongo = require('mongoskin');
var mongodb = require('mongodb');
var Q = require('q');
var service = {};
service.getConnection = getConnection ;
module.exports = service;

function getConnection(appDB){
    var deferred = Q.defer();
    var connectionDetails=global.dbconnections.find(item=>item.appDB==appDB)

    if(connectionDetails){deferred.resolve(connectionDetails.connection);
    }else{createConnection(appDB).then(function(connectionDetails){
            deferred.resolve(connectionDetails);})
    }
    return deferred.promise;
}

function createConnection(appDB){
    var deferred = Q.defer();
    mongodb.MongoClient.connect(connectionServer + appDB, (err,database)=> 
    {
        if(err) deferred.reject(err.name + ': ' + err.message);
        global.dbconnections.push({appDB: appDB,  connection: database});
        deferred.resolve(database);
    })
     return deferred.promise;
} 

0

mongodb.com -> নতুন প্রকল্প -> নতুন ক্লাস্টার -> নতুন সংগ্রহ -> সংযুক্ত -> আইপি ঠিকানা: 0.0.0.0/0 & ডিবি ক্রেডিট -> আপনার অ্যাপ্লিকেশনটি সংযুক্ত করুন -> সংযোগের স্ট্রিংটি অনুলিপি করুন এবং আপনার নোডের .env ফাইলে পেস্ট করুন অ্যাপ্লিকেশন এবং ব্যবহারকারীর আসল পাসওয়ার্ডের সাথে "" প্রতিস্থাপন এবং আপনার ডিবি নামের সাথে "/ পরীক্ষা" প্রতিস্থাপন নিশ্চিত করুন

নতুন ফাইল তৈরি করুন

CONNECTIONSTRING=x --> const client = new MongoClient(CONNECTIONSTRING) 
PORT=8080 
JWTSECRET=mysuper456secret123phrase

0

এক্সপ্রেস ব্যবহার করা হলে আরও একটি সোজা পদ্ধতি রয়েছে যা এক্সপ্রেসের বিল্ট ফিচারটি ব্যবহার করে আপনার অ্যাপের মধ্যে রুট এবং মডিউলগুলির মধ্যে ডেটা ভাগ করে নিতে হয়। 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'));

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

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এবং কোনও অতিরিক্ত মডিউল তৈরির প্রয়োজন নেই।

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