Как мне написать веб-приложение node.js с серверным и клиентским кодом? - PullRequest
5 голосов
/ 09 января 2012

Я планирую написать веб-приложение в стиле spine / backbone.js, которое в основном просто передает большой файл application.js в браузер клиента, который взаимодействует с бэкэндом node.js с помощью ajax. Проблема в том, что я не знаю, как структурировать такой проект, так как я никогда не видел примеров такого приложения. Я могу представить некоторые плюсы и минусы с различными способами сделать это

  • Храните все в одной папке проекта. Код на стороне сервера и на стороне клиента находится в одних и тех же папках, что означает, что они могут совместно использовать ресурсы, такие как проверка ввода формы и языковые файлы. Это кажется хорошим решением, но я понятия не имею, как бы связать только код, который нужен клиенту, а не код сервера. Просто в общем я не знаю как это сделать. Если это было сделано раньше, я хотел бы увидеть пример кода, возможно, даже git-репо

  • Создайте два отдельных проекта. Один для клиента и один для сервера. Это кажется намного более простым и понятным, но не таким элегантным, когда дело доходит до совместного использования ресурсов. Я должен был бы написать код, такой как проверка ввода формы дважды.

Есть мысли?

Ответы [ 5 ]

3 голосов
/ 09 января 2012

Ваша первая ситуация - очень сложный сценарий, и я бы предположил, что мы еще не совсем там. Некоторые утверждают, что нет причин пытаться туда добраться, так как передние / задние части всегда будут выполнять слегка и иногда радикально разные задачи. Такие библиотеки, как derby , обещают, но пока еще не совсем.

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

Я могу работать над такой библиотекой, но сейчас я все еще разрабатываю с 2 папками и копиями моделей с обеих сторон. Разметка макета отправляется с сервера, а все остальное содержимое отображается на стороне клиента после получения JSON с сервера. Честно говоря, количество дублирования не так уж и существенно. Немного раздражает, но также сохраняет большую гибкость, чтобы расти в разных направлениях.

2 голосов
/ 09 января 2012

На эту тему есть хорошая статья: http://blog.nodejitsu.com/scaling-isomorphic-javascript-code

0 голосов
/ 14 июня 2014

Вещи значительно продвинулись вперед, и такие вещи, как

кодирование под влиянием browserify может помочь нам легко достичь этого

всегда будет какой-то необычный код между серверной и клиентской сторонами, но цель всегда должна заключаться в том, чтобы весь логический код содержался в разных модулях (которые впоследствии будут использоваться в обеих средах). Это также лучше с точки зрения TDD, а также уменьшает количество нажатий на клавиатуру.

Посмотрите на такие вещи, как этот стек - http://mindthecode.com/lets-build-an-angularjs-app-with-browserify-and-gulp/

Сказав, что ваш вариант1 не казался мне выполнимым, если у вас были правильные кодеры, кодирующие правильный код.

0 голосов
/ 09 января 2012

Требуется ли в реальном времени?В противном случае подход Дерби может быть слишком тяжелым. Express.js предлагает структуру, в которой клиент js разделен в общедоступной папке, и предоставляет методы для быстрого запуска API RESTful, к которому вы затем можете обращаться с помощью своего application.js.Я полагаю, что вы можете загрузить "классические" js-файлы из public в узел тоже через eval ().

0 голосов
/ 09 января 2012

Это не будет полным ответом на ваш вопрос, но одна библиотека, которая может помочь, если вы решите заняться таким делом, может быть Browserify .

Он разработан таким образом, что вы можете использовать аналогичную функцию require () с предварительно обработанным или «на лету», сгенерированным из js-файла источника, содержащего множество различных модулей. Эти модули могут совместно использоваться на стороне сервера с помощью одного и того же механизма require ().

Я не знаю, как обстоят дела с Backbone, реализованным на стороне сервера в качестве встречной части на стороне сервера для синхронизации моделей, что, по-видимому, является первой целью, которую вы ищите, для предоставления кода, который имеет смысл для совместного использования, например в качестве моделей и валидации, которые будут полезны.

Еще одна вещь, на которую стоит обратить внимание, это requirejs, который использует более традиционные теги скрипта для асинхронной загрузки модулей js, но также работает в node.js, позволяя тем же модулям AMD делиться между кодом узла и клиента.

...