在MEAN应用程序中为每个用户创建一个专用数据库

时间:2018-02-08 12:33:30

标签: node.js mongodb mongoose socket.io database-connection

我正在开发一个项目,每个注册用户需要一个专用数据库。我更喜欢使用MongoDB,因此我将其用于相同的(我是对的吗?)。该应用使用 REST API 作为后端(用 Node Express 编写)和 AngularJS App 。所以,我想要做的就是当用户向某个API端点发出请求时,例如对api/user/mydata的GET请求,我会创建与其特定数据库的连接,获取所需数据,关闭连接并返回获取的数据作为响应。 此方法是否正确?此外,我使用 Mongoose 作为ODM,使用 PassportJS 进行用户身份验证。此外,我的应用程序的用户是互斥的。用户与任何其他注册用户之间没有数据连接。

1 个答案:

答案 0 :(得分:1)

有一种方法可以做到,但只有而不使用Mongoose 。您必须使用 mongodb 节点模块创建与MongoDB服务器的根连接(请注意,而不是该服务器上的特定数据库),然后您可以根据查询要求在数据库之间切换无需为每个数据库创建新连接,如下所示:

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// URL to the root of MongoDB Server and not a particular db
const url = 'mongodb://localhost:27017';

// Database Names
const dbName1 = 'myproject1';
const dbName2 = 'myproject2';

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

  const db1 = client.db(dbName1);
  const db2 = client.db(dbName2);

  client.close();
});

您无法通过mongoose执行此操作,因为mongoose及其模型需要连接到特定数据库而不仅仅是根数据库服务器。无论如何,我不想放弃我自己项目的mongoose所以我不得不求助于用户初始化每个HTTP请求的数据库连接及其模型,并在响应时关闭连接。