Как мне использовать Node.js для внешнего интерфейса и Wordpress в качестве внутреннего? - PullRequest
4 голосов
/ 14 декабря 2011

У меня была мысль об использовании Wordpress в качестве бэкэнда CMS, потому что многие знают об этом, и его легко использовать, а затем использовать Node.JS в качестве внешнего интерфейса. Вы, наверное, сейчас думаете, зачем мне это делать в первую очередь, в чем преимущество?

Я хочу использовать веб-сокеты, и замечательная библиотека Socket.io для Node.JS обеспечивает прекрасную поддержку веб-сокетов в разных браузерах. По сути, я хочу, чтобы пользователь зашел на сайт, веб-сокет создается, а затем содержимое асинхронно подается на внешний интерфейс в виде JSON, а затем декодируется на внешнем интерфейсе без обновления страницы.

По сути, я превращаю Wordpress в CMS в реальном времени. Вы посещаете сайт, но каждая ссылка, по которой вы щелкаете, выбирает страницу как JSON и возвращает ее через веб-сокет, чтобы сохранить несколько запросов и, конечно же, размер страницы.

Как мне заставить Node.JS общаться с базой данных MySQL, извлекать информацию и затем показывать ее? Будем благодарны за любые учебники, ресурсы и другие полезные советы. Некоторые мои коллеги задавались вопросом об одном и том же, поэтому я думаю, что ответы помогут всем.

Ответы [ 4 ]

9 голосов
/ 14 декабря 2011

Точнее, вы не можете использовать Node.js для внешнего интерфейса, так как он работает на сервере, а не в браузере (думайте об этом, как о любом другом языке на стороне сервера, таком как PHP, JSP и т. Д.) ,

Однако вы можете создать описанное решение с помощью jQuery или любой другой библиотеки Javascript, вам просто нужно осуществить передачу данных с помощью Socket.IO. На стороне сервера вам нужно что-то для обработки веб-сокетов, поэтому наиболее естественным способом было бы использовать Node.js, но поскольку вы хотите использовать Wordpress, это становится действительно сложным, так как Wordpress не предназначен для использования в как вы описали, так что, боюсь, вам придется писать свою CMS с нуля в Node.

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

Для MySQL и других модулей для Node необходимо проверить Реестр NPM и страницу Node modules .

EDIT После того, как Дуэйн объяснил свое решение в комментариях, я так и сделаю:

  1. Я бы использовал jQuery для front-end. Связывание document с .on () и установка селектора в «a», чтобы каждый якорь на веб-странице вызывал обработчик.
  2. Обработчик анализирует атрибут a.href и выясняет, является ли это внешней ссылкой, которая не должна обрабатываться Javascript, или это ссылка на следующую страницу, на статью и т. Д. Вы можете запретить действие по умолчанию вызвав e.preventDefault() в обработчике, который не позволяет браузеру перенаправить в местоположение.
  3. Затем обработчик получит содержимое в JSON, вызвав .getJSON() по URL-адресу на основе статьи. Самый простой способ - перенаправить определенный шаблон (например, все URL-адреса, такие как www.domain.com/api) на службу Node через .htaccess, чтобы предотвратить междоменные проблемы.
  4. Затем узел будет видеть запрос, извлекать параметры и выяснять, что хочет пользователь. Затем подключитесь к базе данных MySQL с помощью этого модуля (это так просто, как только можно) и верните соответствующий контент в формате JSON. Не забудьте установить заголовки Content-Type на «application / json».
  5. jQuery получает ответ, выясняет тип запроса и соответственно обновляет содержимое. Прибыль.

Как видите, я бы не использовал WebSockets в этом случае, так как вы бы не получили от этого большой пользы. Они в основном предназначены для небольших обновлений в реальном времени (без огромных заголовков HTTP для уменьшения пропускной способности), которые являются двусторонними. Это означает, что сервер также может выдвигать данные в браузер, не запрашивая их у браузера. В контексте блога это не требуется, и у вас не будет слишком много запросов, поэтому разница в пропускной способности не будет заметна в любом случае. Однако, если вы хотите использовать его в образовательных целях, просто замените часть getJSON на SocketIO, я не уверен, поддерживает ли Apache проксирование WebSockets. Дополнительная информация об основах SocketIO: здесь .

2 голосов
/ 02 мая 2012

Вы должны проверить Wordscript , который я недавно добавил в качестве примера Node JS , который может выступать в качестве простого интерфейса для выполнения базового пост-поиска из базы данных Wordpress.

Он использует общую библиотеку mysql для узла, генерирует запросы MySQL из параметров get и отображает данные по мере их извлечения из базы данных; включая теги.

Wordscript направлен на то, чтобы освободить разработчиков бэкэнда / внешнего интерфейса от необходимости работать с кодовой базой Wordpress PHP, но все же позволяет использовать административный интерфейс Wordpress при необходимости (и разумно это делать). API были написаны на Ruby и PHP, которые возвращают потоки JSON и функционируют в основном так же, как версия узла; так что это дополнительная опция, где доступен язык сценариев.

2 голосов
/ 14 декабря 2011

Редактировать: я пропустил часть с «использованием Node.js на входе». Как сказал Вахур Роосимаа, Node.js находится на стороне сервера (воспринимайте это как комбинацию Nginx / Apache + PHP). Node - это не интерфейсная библиотека, как jQuery. Если вы хотите, вы можете использовать его только для функциональности веб-сокетов (я предлагаю использовать Socket.IO ).

Хорошие учебники по Node.js и MySQL:

http://www.giantflyingsaucer.com/blog/?p=2596
http://mclear.co.uk/2011/01/26/very-simple-nodejs-mysql-select-query-example/
http://www.hacksparrow.com/using-mysql-with-node-js.html

Этот вопрос SO также может помочь: MySQL с Node.js

Также проверьте примеры из репозитория github node-mysql .

Если вы хотите что-то более продвинутое, например, ORM, я рекомендую Sequelize .
Еще один хороший вопрос от SO: Какую ORM я должен использовать для Node.js и MySQL?

0 голосов
/ 03 марта 2014

Один из вариантов, который вы можете использовать, если вы хотите использовать WordPress в качестве CMS и сохранить его пользовательский интерфейс администратора, - это писать шаблоны WordPress для вывода JSON вместо HTML.для конкретного решения, так как вам нужно будет написать вывод JSON для каждого шаблона / данных, которые вы хотите.Плюс в том, что вы можете создать JSON специально для ваших нужд.

На стороне узла вы пишете небольшой сервер, который будет использовать JSON, что позволит вам использовать любой язык шаблонов JavaScript, который вы захотите.Nodejs также поможет с производительностью, так как вы можете сохранить визуализированный контент и / или вывод JSON в памяти, сохраняя ваши обращения к шаблонам WordPress.

Я написал об этом блог, в котором описываются дополнительные преимущества совместного использования nodejs и wordpress.

http://www.1001.io/improve-wordpress-with-nodejs/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...