我在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"
我在这里做错了什么?
答案 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});
});