在 MEAN 应用程序中为每个用户创建专用数据库
Create a dedicated Database per user in a MEAN App
我正在从事一个项目,该项目要求每个注册用户都有一个专用数据库。我更喜欢使用 MongoDB,所以我将其用于相同的 (我说得对吗?)。该应用程序使用 REST API 作为后端(用 Node Express 编写)和 AngularJS 应用。所以,我想做的是每当用户向某个 API 端点发出请求时,比如向 api/user/mydata
发出 GET 请求,我会创建到他的特定数据库的连接,获取所需的数据,关闭连接和 return 获取的数据作为响应。 这种方法正确吗?此外,我使用 Mongoose 作为 ODM,并使用 PassportJS 进行用户身份验证.此外,我的应用程序的用户是相互排斥的。用户与任何其他注册用户之间没有数据连接。
有一种方法可以做到这一点,但只能不使用 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 请求初始化数据库连接及其模型,并在响应时关闭连接。
我正在从事一个项目,该项目要求每个注册用户都有一个专用数据库。我更喜欢使用 MongoDB,所以我将其用于相同的 (我说得对吗?)。该应用程序使用 REST API 作为后端(用 Node Express 编写)和 AngularJS 应用。所以,我想做的是每当用户向某个 API 端点发出请求时,比如向 api/user/mydata
发出 GET 请求,我会创建到他的特定数据库的连接,获取所需的数据,关闭连接和 return 获取的数据作为响应。 这种方法正确吗?此外,我使用 Mongoose 作为 ODM,并使用 PassportJS 进行用户身份验证.此外,我的应用程序的用户是相互排斥的。用户与任何其他注册用户之间没有数据连接。
有一种方法可以做到这一点,但只能不使用 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 请求初始化数据库连接及其模型,并在响应时关闭连接。