Модуль MarkLogi c Node.js npm не может обработать> 400 статус ошибки - PullRequest
0 голосов
/ 20 января 2020

Я использую Marklogi c npm module v2.1.1 с моим приложением express (v4.16.4) Node. В моей функции контроллера я использую метод db.eval для возврата данных вместе с необходимым кодом состояния, используя функцию xdmp.setResponseCode(). Найдите приведенный ниже фрагмент кода

// controller function 
function getNewsArticleById(db: any, fileName: string, req: any, res: any, next: any) {
  return db.eval(
     `xdmp.setResponseCode(403, 'Forbidden');
     {data: 'abc'};`,
     {},
     })
    .result(
      data => {
        res.json(data[0].value);
      },
      err => {
        console.log(err);
        next(err);
      });
}

. Вышеуказанная функция привязана к маршруту и ​​возвращает желаемый ответ, который может быть либо успешным (200 кодов ответов), либо неудачным (400 кодов ответов). Успешный случай работает нормально, но когда когда-либо код устанавливается равным 400 или более, код ответа я получаю ошибку 500, говорящую

eval JavaScript на сервере: невозможно обработать ответ с состоянием 403.

Мне кажется, это ограничение функции db.eval() MarkLogi c

Подскажите, пожалуйста, как это исправить? Если нет, то какая должна быть лучшая альтернатива?

1 Ответ

2 голосов
/ 20 января 2020

Типичным подходом для вычисляемого кода будет возвращение значения ошибки вместо установки кода состояния HTTP.

Если вы хотите предоставить HTTP-интерфейс для вашего кода сценария в коде MarkLogi c, Вы можете написать и установить конечную точку. Конечная точка полностью контролирует ответ HTTP.

Вы также можете написать и установить расширение службы ресурсов, которое вызывается API REST, но может указывать статус HTTP ошибки при выдаче ошибки, как описано здесь:

http://docs.marklogic.com/guide/rest-dev/extensions#id_20992

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

Надеюсь, что поможет,

...