Я пытаюсь использовать markLogic в качестве репозитория документов и написать клиент, который может получить к нему доступ с моего локального хоста (Apache)...

В markLogic я создал новый сервер REST (8011), и теперь я хотел бы получить доступ к базе данных markLogic от клиента с помощью (надеюсь, простого) HTTP-запроса (на самом деле с использованием jQuery $.ajax). Однако проблема CORS поднимает свою уродливую голову. После исследования stackoverflow я изменил $.ajax, включив в него утверждение: «crossDomain: true», однако этого недостаточно.

Нужно ли каким-либо образом изменять мой локальный хост (Apache)?

Возможно, мне нужно изменить сервер ответов (markLogic localhost: 8011) на: «Access-Control-Allow-Headers: *». ?

Как это сделать? Вроде как должна быть команда markLogic: "xdmp:add-response-header("meta", "description")" - правда, где, в каком виде? Это параметр или оператор pgm?

Кажется, это обычная проблема, так как я столкнулся с несколькими вопросами такого рода, но ответов нет.

3
Hugh A. Tucker 13 Фев 2015 в 02:36

2 ответа

Обычная практика состоит в том, чтобы сделать одну из двух вещей:

  1. используйте двухуровневую архитектуру, в которой MarkLogic размещает JavaScript/HTML/CSS/и т. д. в дополнение к конечным точкам REST, которые будут предоставлять ваши данные.
  2. используйте трехуровневую архитектуру, в которой ваш клиент (браузер) отправляет свои запросы на средний уровень, который перенаправляет запрос в MarkLogic.

Любой подход правомерен. Вы можете посмотреть Samplestack для примера трехуровневого подхода. Текущая реализация обеспечивает средний уровень Java; в недалеком будущем должен появиться вариант среднего уровня Node.js. генератор slush-marklogic-node также использует трехуровневый подход с Node. js в качестве среднего уровня (это менее отполировано, чем Samplestack, но довольно просто начать работу).

4
Dave Cassel 13 Фев 2015 в 04:28

Поскольку в вопросе упоминается apache, возможно, проще всего прозрачно проксировать запросы MarkLogic через этот интерфейсный веб-сервер. Что касается браузера, это должно выглядеть как один хост и порт.

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html есть полные документы, но я думаю, что это может быть так же просто, как:

 ProxyPassReverse /ml8011/ http://localhost:8011/
4
mblakele 13 Фев 2015 в 05:43
1
Нет необходимости вводить средний уровень. С обратным прокси (с точки зрения браузера) он будет выглядеть как один и тот же источник, даже если на бэкэнде есть несколько серверов. Кроме того, вы можете переместить свои статические ресурсы в прокси-сервер Apache вместо использования MarkLogic для их обслуживания.
 – 
ipaul
18 Фев 2015 в 19:39