Если вы используете vscode, вы можете использовать мое расширение csharp2ts , которое делает именно это.
Вы просто выбираете вставленный код C # и запускаете команду Convert C# to TypeScript
из палитры команд Пример преобразования:
public class Person
{
///
/// Primary key
///
public int Id { get; set; }
///
/// Person name
///
public string Name { get; set; }
}
-
export interface Person
{
/**Primary key */
Id : number;
/**Person name */
Name : string;
}
Основной коммиттер node-mongodb-native говорит :
Вы открываете make MongoClient.connect один раз, когда ваше приложение загружается и повторно использует объект db. Это не единичный пул соединений каждый .connect создает новый пул соединений.
Итак, чтобы напрямую ответить на ваш вопрос, повторно используйте объект db, полученный в результате MongoClient.connect (). Это дает вам объединение и обеспечивает заметное увеличение скорости по сравнению с открытием / закрытием соединений при каждом действии db.
Я реализовал ниже код в своем проекте для реализации пула соединений в моем коде, чтобы он создавал минимальное соединение в моем проекте и повторно использовал доступное соединение
/* 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");
});
Я использую общий пул с соединениями redis в своем приложении - я очень рекомендую его. Его общий и я определенно знаю, что он работает с mysql, поэтому я не думаю, что у вас будут проблемы с ним и mongo
Вы должны создать соединение в качестве службы, а затем повторно использовать его, когда это необходимо.
// 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
Если у вас есть Express.js, вы можете использовать express-mongo-db для кэширования и совместного использования соединения MongoDB между запросами без пула (поскольку принятый ответ говорит, что это правильный способ обмена соединение).
Если нет - вы можете посмотреть его исходный код и использовать его в другой структуре.
Лучший подход к реализации пула соединений - это создать одну глобальную переменную массива, которая будет содержать имя db с объектом соединения, возвращаемым MongoClient, и затем повторно использовать это соединение, когда вам нужно связаться с базой данных.
Надеюсь, что это поможет:)
Вот код connectionService.js :
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;
}
http://mongoosejs.com/docs/api.html
Проверьте источник Mongoose. Они открывают соединение и привязывают его к объекту модели, поэтому, когда требуется объект модели, в DB создается соединение. Драйвер заботится о пуле соединений.
Управляйте пулами соединений mongo в одном автономном модуле. Такой подход обеспечивает два преимущества. Во-первых, он сохраняет ваш код модульным и легче тестировать. Во-вторых, вы не должны смешивать соединение с базой данных в объекте запроса, который НЕ является местом для объекта подключения к базе данных. (Учитывая характер JavaScript, я считаю, что очень опасно смешивать что-либо с объектом, созданным библиотечным кодом). Таким образом, вам нужно только рассмотреть модуль, который экспортирует два метода. 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()
, когда это необходимо соединение с DB.
const db = require('./myAwesomeDbModule');
db.get().find(...)... // I have excluded code here to keep the example simple
Если вы настроили свой модуль db так же, как и следующий, вы не только сможете убедиться, что ваше приложение не будет загружаться, если у вас нет подключения к базе данных также имеют глобальный способ доступа к пулу подключений к базе данных, который будет ошибочен, если у вас нет соединения.
// 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;
}
req.db
с помощью этого промежуточного программного обеспечения: github.com/floatdrop/express-mongo-db – floatdrop 8 August 2014 в 19:15