Подтвердить что ты не робот

SaaS-приложение с angularjs и nodejs, как мне организовать разные клиенты?

Я пытаюсь решить, что мне делать в этом сценарии:

Я хочу создать продукт, который я хочу продать в бизнес-модели SaaS, у меня уже есть бэкэнд, более или менее продуманный и некоторый код в узле nodejs. Он обрабатывает oAuth, сеансы и контролирует роли пользователей при доступе к определенной конечной точке.

Уверенность заключается в архитектуре frontend: Каждый клиент будет обладать одинаковой функциональностью, но дизайн их страницы будет полностью отличаться друг от друга. Я хочу поместить столько логики приложения, что я могу в сервисах, поэтому я могу его повторно использовать, моя идея состоит в том, чтобы изменять только контроллеры/шаблоны/директивы от клиента к клиенту, это нормально?

Должен ли я иметь разные папки и обслуживать статические файлы для каждого клиента из nodejs? например: в nodejs Я бы знал, что URL-адрес для client1 был вызван так, чтобы я обслуживал client1-index.html?

Должен ли я помещать каждый клиент в свой собственный nodejs-сервер и собственный хост?

какие существуют другие способы?

Я хотел бы иметь возможность легко повторно использовать службы, так как я буду добавлять изменения в функции или добавлять больше, и я хочу сделать это легко.

Там также будет панель администратора, которая будет точно такой же для всех из них, часть, которая будет изменяться, - это та, которую видят мои клиенты.

Подумайте об этом, имея много клиентов и предоставляя каждому из них магазин, чтобы они могли продавать свои вещи. Им нужна страница администратора и открытая страница. Страница администратора будет одинаковой для всех, но общедоступная страница должна измениться.

Итак, и приложение, которое обладает одинаковой функциональностью для пользователей, но выглядит совершенно по-другому для каждого из них, как бы вы это сделали?

4b9b3361

Ответ 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
    • CSS ФАЙЛЫ ЗДЕСЬ

Пример 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

Надеюсь, это поможет. Ключевым моментом здесь является возможность обновления шаблонов через браузер и распространения их на новые магазины/клиенты через веб-панель.