我开始使用SailsJS,我发现它非常棒且功能强大。
有人可以解释一下如何向Sails外的API发送POST和GET请求,以及我在哪里写这个请求?
非常感谢2016年大家快乐!
修改
你好@arcseldon,谢谢你一直试图帮助我。
我会尝试更好地解释自己,并告诉你我的代码。
我有一个用PHP编写的API(我认为不相关),它接受POST,GET,PUT,DELETE方法。我使用Postman进行测试,一切看起来还不错。
我正在尝试在Sails中创建一个应用程序,它向我的API发出GET和POST请求,但我不知道放置GET和POST代码的最佳位置在哪里。
在模型中我已经有以下要求令牌来执行其他请求,并且它可以工作:
gettoken: function (requestnewtoken,tokenresult) {
if(!requestnewtoken) {
tokenresult(global.tokeng);
} else {
request({
headers: {
'User-agent' : 'develop',
'Content-Type' : 'application/x-www-form-urlencoded;charset=UTF-8',
'Content-Length' : '29',
'Authorization' : 'Basic ' + global.idsecret
},
uri: "https://myapi/oauth2/token",
method: "POST",
form: {
grant_type: "client_credentials"
}
}, function(error, response, body) {
var tokenjson = JSON.parse(body);
var token = tokenjson['access_token'];
global.tokeng = token;
tokenresult(token);
});
}
}
然后,我对另一个端点执行GET请求,该端点有效:
listpublicroutes: function(requestnewtoken,cb) {
Model.gettoken(requestnewtoken,function(token) {
request({
headers: {
'Authorization' : 'Bearer ' + token
},
uri: "https://myapi/folder/file.json",
method: "GET",
timeout: 10000,
followRedirect: true,
maxRedirects: 10
}, function(error,response, body) {
if(error || (response.statusCode != 200)) {
Model.listpublicroutes(true,cb);
} else {
cb(null,JSON.parse(body));
}
});
});
}
我怀疑这是否是编写POST和GET请求的最佳方式,或者它们可能更简单,如果请求应该在控制器(或其他任何地方)而不是模型中完成。
你能给我一个POST和GET请求的例子吗?
非常感谢所有想要了解我的人。
答案 0 :(得分:1)
您的问题并不清楚您的要求......根据您的目的,以下是一些建议。
如果您正在尝试呼叫并从内部发出http请求 服务器端Sails代码然后我建议你看一下 NPM模块request。
如果您正在讨论获取/发布测试API的请求, 然后使用网络浏览器插件/工具,如postman(也是一个 相同名称的Chrome插件。
如果您正在谈论调用完全不同的域URL 在Web应用程序客户端中使用AJAX(通过Web浏览器) 那么你可以使用任何AJAX方法(jquery / angular / whatever 您正在使用的客户端库来进行ajax调用)但请注意 你打电话给的域必须用十字架设置 原始资源共享( CORS )。
您可以控制自己的CORS设置(允许源自其他域的应用通过更新 config / cors.js 设置从浏览器调用您的sails API。
这是否回答了你的问题?如果您需要进一步的帮助,请在下面留言,我会尽力提供帮助。
根据问题更新进行更新:
@Michi - 好的,您希望从SailsJS中调用您的PHP api - 就位置而言,三个竞争者是在Controller,自定义Model方法或自定义服务中。
我的建议"大多数情况下,如果逻辑不是真的需要在别处共享,那么这个逻辑就在Controller内。你可以想象,可以调用Model.method(),但通常""您希望将模型视为您的域数据(当然不总是如此,如果您所做的事情的责任真正属于拥有所有状态交互的单个模型等,那么模型可能是找到该责任的正确位置) 。
但是,在你的情况下,你得到一个令牌,而没有看到你的模型代码(你刚刚提供了getToken函数,它看起来并没有真正与特定模型相关联......)然后如果其他地方不需要,我会选择在你的控制器中调用它。否则,将其重构为service。引用SailsJS文档:
可以将服务视为包含其功能的库 您可能希望在应用程序的许多位置使用。例如, 您可能有一个EmailService,它包含一些默认的电子邮件 您希望在您的许多部分中使用的样板代码 应用。在Sails中使用服务的主要好处是它们 全球化 - 您不必使用require()来访问它们。
我经常将自定义逻辑放在控制器,模型和服务中,但对于网络相关逻辑等,我的偏好是:
使用模型,只有当您坚信逻辑和责任真正与该模型相关时 - 在这里谨慎一点并谨慎使用。但我承认我的建议可能被认为是主观的 - 我将它们建立在我认为优秀的OOP实践的基础上。