【问题标题】:Create a dedicated Database per user in a MEAN App在 MEAN 应用程序中为每个用户创建一个专用数据库
【发布时间】:2018-07-19 00:46:02
【问题描述】:

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

【问题讨论】:

  • 为什么需要单独的数据库?您的目的可以通过在 1 个数据库中包含多个集合来解决。
  • 不,我需要每个用户单独的数据库。我实际上正在创建一个股票管理应用程序。而且,我的用户就是我的客户。每个数据库将具有与特定数据库中特定用户的库存相关的数据,如已售库存、可用库存、已下订单、客户账单详细信息等。我希望你明白我的意思。
  • 这些事情也可以在 1 个数据库中处理。
  • @bipin 也可以正常登录使用。检查它的文档,你会自己知道。真的很棒。另外,请对问题帖子进行投票。谢谢。 :)
  • @bipin 哦,对不起。实际上,您必须为用户身份验证创建一个专用的身份验证数据库,其中包含他们的身份验证凭据和他们所属的数据库的名称。初始化护照时,您必须连接到此全局数据库。

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


【解决方案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 及其模型需要连接到特定数据库,而不仅仅是根数据库服务器。无论如何,我不想为自己的项目放弃猫鼬,所​​以我只需要根据用户的 HTTP 请求初始化数据库连接及其模型,并在响应时关闭连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2014-11-01
    • 1970-01-01
    相关资源
    最近更新 更多