У меня есть простой маршрут API, настроенный в Express (потребляемый в основном через мой Angular-интерфейс):

 app.post('/api/sendEmail', emailApi.sendEmail);

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

  request({
    url: '/api/sendEmail',
    method: 'POST',
    json: {
      template: template.toLowerCase(),
      obj: mailObj
    }
  }, function(error, response, body){
    console.log('error', error);
    console.log('response', response);
    console.log('body', body);
  });

Тем не менее, я получаю эту ошибку:

 Error: Invalid URI "/api/sendEmail"

Что я здесь делаю не так?

4
JVG 6 Янв 2017 в 09:10

4 ответа

Лучший ответ

Вам необходимо использовать абсолютный URI (включая протокол, домен и порт, если он не прослушивает порт по умолчанию).

Например, если вы знаете, что сервер будет прослушивать localhost:3000, вам нужно заменить значение url на 'http://localhost:3000/api/sendEmail'.

1
jmar777 6 Янв 2017 в 06:15

Измените URL-адрес на http://127.0.0.1:3000/api/sendEmail, поскольку Вы вызов внутреннего API с помощью Express или вы также можете использовать localhost вместо 127.0.0.1.

request({
    url: 'http://127.0.0.1:3000/api/sendEmail', //on 3000 put your port no.
    method: 'POST',
    json: {
        template: template.toLowerCase(),
        obj: mailObj
    }
}, function (error, response, body) {
    console.log({error: error, response: response, body: body});
});
1
Shekhar Tyagi 6 Янв 2017 в 06:42

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

С практической точки зрения, есть некоторые сложные вопросы о том, как обратиться к себе в сети. Обычно вы можете сделать это через localhost, но нет никакой гарантии, что сервер прослушивает этот адрес. Так что вам придется принять это во внимание.

1
Seth Holladay 6 Янв 2017 в 06:16

Предполагая, что вы не используете веб-сервер, такой как nginx, и разрабатываете на localhost. Экспресс-приложение не знает, откуда поступил запрос. Попробуйте установить свой URL как http://localhost:300/api/sendEmail.

1
Nitish Phanse 6 Янв 2017 в 06:16