SaaS-приложение с angularjs и nodejs, как мне организовать разные клиенты?
Я пытаюсь решить, что мне делать в этом сценарии:
Я хочу создать продукт, который я хочу продать в бизнес-модели SaaS, у меня уже есть бэкэнд, более или менее продуманный и некоторый код в узле nodejs. Он обрабатывает oAuth, сеансы и контролирует роли пользователей при доступе к определенной конечной точке.
Уверенность заключается в архитектуре frontend:
Каждый клиент будет обладать одинаковой функциональностью, но дизайн их страницы будет полностью отличаться друг от друга.
Я хочу поместить столько логики приложения, что я могу в сервисах, поэтому я могу его повторно использовать, моя идея состоит в том, чтобы изменять только контроллеры/шаблоны/директивы от клиента к клиенту, это нормально?
Должен ли я иметь разные папки и обслуживать статические файлы для каждого клиента из nodejs?
например:
в nodejs Я бы знал, что URL-адрес для client1 был вызван так, чтобы я обслуживал client1-index.html?
Должен ли я помещать каждый клиент в свой собственный nodejs-сервер и собственный хост?
какие существуют другие способы?
Я хотел бы иметь возможность легко повторно использовать службы, так как я буду добавлять изменения в функции или добавлять больше, и я хочу сделать это легко.
Там также будет панель администратора, которая будет точно такой же для всех из них, часть, которая будет изменяться, - это та, которую видят мои клиенты.
Подумайте об этом, имея много клиентов и предоставляя каждому из них магазин, чтобы они могли продавать свои вещи. Им нужна страница администратора и открытая страница. Страница администратора будет одинаковой для всех, но общедоступная страница должна измениться.
Итак, и приложение, которое обладает одинаковой функциональностью для пользователей, но выглядит совершенно по-другому для каждого из них, как бы вы это сделали?
Ответы
Ответ 1
Поскольку вы, кажется, используете Angular, подумали ли вы об использовании службы маршрутизации? Подробнее об этом здесь: https://docs.angularjs.org/api/ngRoute/provider/ $routeProvider
В основном то, что он делает, это на основе url загружает html-страницу и контроллер (JS файл). Например, если ваш пользователь просто перейдет на url.com/client1 и angular будет загружать client1.html и client1CTRL.
Простая структура будет следующей:
- Index.Html- Ссылки на любые зависимости, а в теле только тег ng-view
- Шаблоны (шаблоны Html для каждого из пользователей)
- Войти
- Администратор
- Клиент 1 и т.д.
- Скрипты (JS)
- Внешние скрипты (JQuery, angular ETC)
- Index.js(Здесь вы будете иметь все ваши js-контроллеры для каждой страницы)
- Stylesheets
Пример angular Маршрутизация: Tutorial
var App = angular.module('saasApp', []);
App.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/admin', {
templateUrl: 'templates/admin.html',
controller: 'AdminController'
}).
when('/client1', {
templateUrl: 'templates/client1.html',
controller: 'client1Controller'
}).
when('/login', {
templateUrl: 'templates/login.html',
controller: 'loginController'
}).
otherwise({
redirectTo: '/login'
});
}]);
Надеюсь, что это работает на то, что вы пытаетесь сделать.
Ответ 2
Я думаю, ваш вопрос об архитектуре. Если бы я выполнял те же внутренние и разные интерфейсы, я бы реализовал структуру виртуальных шаблонов.
Разрешения
Я бы:
- суперпользователь, имеющий права на установку нескольких магазинов.
- пользователь admin, который может управлять определенным хранилищем.
Управление шаблонами Super User.
- У меня были бы базовые шаблоны в /admin/templates, и когда я создам новый магазин, я бы скопировал их и вложил в базу данных
- Я бы создал меню со всеми шаблонами с левой стороны и имел wysiwyg-редактор, который позволяет мне изменять этот шаблон для конкретного клиента и загружать дополнительные ресурсы (изображения, PDF файлы и т.д.).
- Шаблон будет поддерживать синтаксис swig.
- Я бы создал маршрут сервера /get/tempalte/: id и динамически анализировал эти шаблоны на сервере с помощью swig engine
Надеюсь, это поможет. Ключевым моментом здесь является возможность обновления шаблонов через браузер и распространения их на новые магазины/клиенты через веб-панель.