Начало работы с Node.js, angular.js и MongoDB, моделирование отношений и другие подсказки
Я прихожу из Java и реляционного мира, пытаясь намочить ноги. Приложение, над которым я работаю, - это система планирования назначения, использующая node.js и MOngo на бэкэнд, а клиент находится в angular.js.
Я пытаюсь понять пару ключевых понятий, которые могут быть остатками моего смещения Java. любая помощь в указании на соответствующие фрагменты, советы приветствуются.
1) Как мне управлять отношениями между назначением, представителем клиента и службы в Mongo/ Node? Создаются ли объекты назначения и ссылка на идентификатор пользователя, хранящиеся в записи? Нужно ли пользователю иметь ссылку на список встреч?
2) Пользователь authn/authz, так как node используется в качестве сервисного провайдера, как создать элемент управления на основе ролей? Например, когда пользователь регистрируется в качестве представителя службы, он должен быть одобрен. Есть ли модуль, который может помочь?
3) Любой общий модуль, который дает отчеты о регистрации пользователей и т.д.?
4) Как люди управляют разрешениями на стороне MVC на стороне клиента?
Приветствуются любые указатели.
Ответы
Ответ 1
Выполнение приложений, в которых у вас есть как серверный компонент, так и клиентский компонент, делает вещи немного сложнее, чем просто серверная инфраструктура.
-
При использовании клиентской среды, такой как AngularJS, все ваши шаблоны скомпилированы на стороне клиента, а не на стороне сервера. Это огромная разница с традиционным рендерингом на стороне сервера. Это означает, что вместо отправки отображаемого HTML клиенту вы отправляете JSON. Ваш сервер по существу станет RESTful API с безопасностью.
-
Я не очень знаком с AngularJS, больше с Ember, но вы по существу создали бы успокаивающее обслуживание: https://gist.github.com/2432692. Это будет связываться с сервером на интерфейсе RESTful.
-
На сервере, используя nodejs, вы должны использовать ORM, например Mongoose или что-то подобное. Вы можете создавать отношения, документы и т.д. Одна заметка: вам придется дублировать свои модели как на сервере, так и на клиенте.
-
MongoDB использует bson, двоичное кодирование сериализованной строки/объекта JSON. Поскольку nodejs построен с использованием JavaScript-движка V8, JSON является естественным типом объекта, поэтому работа с MongoDB чрезвычайно проста.
-
HTTP-сервер в NodeJS: NodeJS обеспечивает базовую реализацию для http-сервера. Это не так много, но вы можете отвечать и обрабатывать запросы. Нет поддержки сеанса, cookie, auth, поэтому вы можете использовать connect
, который строит поверх обычного HTTP-сервера или использует ExpressJS, который строит как на connect
, так и на обычном http
сервере, который node предоставляет, ExpressJS чрезвычайно легко начать работу и хорошо работает с бэкэндами RESTful.
Это довольно просто. Получите ExpressJS, создайте новое приложение, настройте все клиентские компоненты (angularJS) и модульные системы, если вы используете AMD, CommonJS, Browserify и т.д.
Ответ 2
Я не знаком с node.js, но для дизайна mongodb вам придется выбирать между "субдокументами" и "связыванием документов".
1
Вы можете взглянуть на как структурировать отношения "многие ко многим" в мангусте?.
Идея состоит в том, чтобы получить полный документ, где это имеет смысл. Например, у вас может быть следующая схема.
{ customer : { name: xxx },
appointments: [ {date: xx, type : xxx .., servicerep: xxx}, {date: xx, type : xxx .., servicerep: xxx} ]
}
хотя информация может быть дублирована, для запросов вы попадаете только в один документ/субдокумент.
4
Несмотря на то, что это может быть клиентская сторона, это не означает, что сервер не должен проверять. Клиент может проверять как можно лучше, но сервер все еще должен проверять. Извините, я больше не хочу добавлять.