Невозможно объединить 2 запроса в один маршрут - PullRequest
0 голосов
/ 03 января 2019

Из моего API узла мне нужно вызвать внешний API.Для этого я использую https://github.com/request/request-promise-native

Пример маршрута, который работает:

router.get('/update/:id/:value', async (req, res) => {
  const result = await updateMethod(req.params.id, req.params.value);
  res.status(200);
  res.json(result);
});

Проблема в том, что я не хочу вызывать этот маршрут.Метод обновления должен вызываться на другом маршрутизаторе после метода create:

router.post('/create', (req, res, next) => {
  mongo.create(data, async (e, createdEntity) => {
    const saved = await createMethod(someObject);
    const updated = await updateMethod(id, value);
    res.status(200);
    res.json(createdEntity);
    return res;
  }
});

Поэтому я вставляю некоторые данные в mongo, я помещаю некоторые данные во внешний API (внутри createMethod) и, наконец, я обновляю / PUT некоторыеданные во внешний API.

Оба POST работают, но PUT не работает с:

{RequestError: Ошибка: запись EPROTO 101057795: ошибка: 1408E0F4: процедуры SSL: ssl3_get_message: неожиданное сообщение: openssl \ ssl \ s3_both.c: 408

{method: 'PUT', uri: 'https://externalAPI.com/v1/id/123/value/321', rejectUnauthorized: false, заголовки: {' x-api-key ':' xyz ', 'app-user-id': 'me'}, json: true,

Проблема в том, что точно такой же метод PUT работает, если я вызываю маршрут /update/:id/:value вручную, а не методомс /create

Это не похоже на то, как реализован метод обновления, поскольку он работает на первом маршруте:

updateMethod = (id, value) => {
  const options = {
    method: 'PUT',
    uri: `${process.env.API_ENDPOINT}/id/${id}/value/${value}`,
    rejectUnauthorized: false,
    headers: {
      'x-api-key': process.env.API_KEY,
      'app-user-id': process.env.API_USER,
    },
    json: true,
  };

  return request(options)
    .then(response => response)
    .catch((e) => {
      console.log(e);
    });
};

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

1 Ответ

0 голосов
/ 03 января 2019

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

Сообщение об ошибке, которое вы опубликовали, связано с SSL - узел по какой-то причине не может безопасно взаимодействовать с внешним сервером API. Это то, что вам нужно решить. Вы также можете попробовать использовать HTTP вместо HTTPS, если это позволяет внешняя служба.

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