Я много искал, чтобы найти решение моей проблемы.но не получил это.если у кого-то есть опыт в таких ситуациях, пожалуйста, помогите мне.
Я создал сервер приложений в узле экспресс с MySQL базой данных.и успешно создать конечные точки API REST, которые успешно работают.
, но наши проекты расширились.приближается новый клиент, поэтому мы должны обслуживать и этих клиентов.эти клиенты могут иметь 1 тыс. пользователей. но схема базы данных такая же.
решение 1: создать отдельный сервер и базу данных для каждого клиента с другим номером порта.но я не думаю, что это хорошее решение, потому что если у нас 100 клиентов, мы не сможем поддерживать базу кода.
решение 2: создать отдельную базу данных для каждого клиента и переключать соединение с базой данных во время выполнения.но я не понимаю, как реализовать решение 2. любое предложение высоко ценится.
если более одного клиента запрашивают один и тот же сервер, как узнать, к какой базе данных необходимо подключиться, используя URL-адрес конечной точки.У меня есть альтернативный способ решения этой ситуации.
Мое решение: создать промежуточное программное обеспечение, чтобы выяснить, какая база данных требуется, и вернуть строку подключения. Это хорошая идея.
промежуточное ПО.В приведенном ниже примере я использую токен JWT, который содержит имя базы данных.
const dbHelper=new db();
class DbChooser {
constructor(){
this. db=
{
wesa:{
host: "xxx",
user: "xxxx",
password: "xxxxx",
database: "hdgh",
connectionLimit:10,
connectTimeout:30000,
multipleStatements:true,
charset:"utf8mb4"
},
svn:{
host: "x.x.x.x.",
user: "xxxx",
password: "xxx",
database: "xxx",
connectionLimit:10,
connectTimeout:30000,
multipleStatements:true,
charset:"utf8mb4"
}
};
}
async getConnectiontring(req,res,next){
//console.log(req.decoded);
let d=new DbChooser();
let con=d.db[req.decoded.userId];
console.log(mysql.createPool(con));
next();
}
}
module.exports=DbChooser;