从Express中调用内部API

时间:2017-01-06 06:10:07

标签: javascript node.js express

我在Express中设置了一个简单的API路由(主要通过我的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 个答案:

答案 0 :(得分:1)

您需要使用绝对URI(包括协议,域和端口,如果它没有在默认端口上侦听)。

例如,如果您知道服务器将在localhost:3000收听,您可能希望将url值替换为'http://localhost:3000/api/sendEmail'

答案 1 :(得分:1)

emailApi.sendEmail只是一个功能。你最好直接调用它。以这种方式使用网络将严重浪费资源。

实际上,有一些关于如何在网络上解决问题的复杂问题。通常您可以通过localhost完成此操作,但不保证服务器正在侦听该地址。因此,您必须考虑到这一点。

答案 2 :(得分:1)

假设您没有使用像nginx这样的Web服务器并且正在使用localhost进行开发。快递应用程序不知道请求源自何处。尝试将您的网址设置为http://localhost:300/api/sendEmail

答案 3 :(得分:1)

  

将网址更改为' http://127.0.0.1:3000/api/sendEmail',因为您已经   用express表示内部api或者你也可以使用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});
});