Calling an internal API from within Express

醉酒当歌 提交于 2020-08-27 16:02:46

问题


I have a simple API route set up in Express (consumed mainly via my Angular frontend):

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

I've made a module that sits in my backend and also needs to call this service. I figured the easiest way was to do a POST request:

  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);
  });

However, I get this error:

 Error: Invalid URI "/api/sendEmail"

What am I doing wrong here?


回答1:


You need to use an absolute URI (including the protocol, domain, and port if it's not listening on the default port).

For example, if you know that the server will be listening at localhost:3000, you would want to replace your url value with 'http://localhost:3000/api/sendEmail'.




回答2:


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});
});



回答3:


emailApi.sendEmail is just a function. You are much better off calling it directly. Using the network in this manner would be a serious waste of resources.

On a practical note, there are some complex issues about how to address yourself on the network. Usually you can accomplish this via localhost, but there's no guarantee that the server is listening at that address. So you'll have to take that into account.




回答4:


Assuming you are not using a web server like nginx and are developing on localhost. The express app does not know from where the request has originated. Try setting your Url as http://localhost:300/api/sendEmail.



来源:https://stackoverflow.com/questions/41499957/calling-an-internal-api-from-within-express

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!