2017-01-06 3 views
1

У меня есть простой маршрут API, установленный в экспрессе (потребленный в основном через мой угловой фронтэнд):Вызов внутреннего API изнутри Экспресс

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" 

Что я делаю неправильно здесь?

+0

имя хоста требуется в URL. И, кстати, ваш модуль, который пытается вызвать/api/sendEmail, находится в другом приложении node.js? –

ответ

2

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

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

1

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

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

1

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

1

Change Url to' http://127.0.0.1:3000/api/sendEmail ', because you're calling an internal api with in express or you can also use localhost in place of 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}); 
});