【问题标题】:How to send POST and GET requests from Sails app to outside Sails API如何从 Sails 应用程序向外部 Sails API 发送 POST 和 GET 请求
【发布时间】:2016-01-16 17:32:06
【问题描述】:

我开始使用 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 请求的例子吗?

非常感谢所有试图理解我的人。

【问题讨论】:

  • 您是否正在尝试使用您的 api?如果有,从哪里来?如果你想测试你的 api,你可以使用 curl .. 但如果你是新手,你可以使用 postman,它是一个“测试”请求的工具
  • 我打算从 Sails 向我的 API 请求信息。我已经使用 Postman 进行测试,但这不是我想要做的。
  • 您的意思是客户端(帆)-提供者(api)架构吗?

标签: sails.js


【解决方案1】:

您的问题并不清楚您要问什么...这里有一些建议,具体取决于您希望做什么。

如果您尝试从内部调用并发出 http 请求 服务器端 Sails 代码,那么我建议您看一下 NPM 模块request.

如果您正在谈论发出 get/post 请求来测试您的 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.method(),但“通常”您希望将模型视为您的域数据(当然并非总是如此,如果您正在做的事情的责任真正属于拥有所有状态交互然后模型可能是定位该责任的正确位置)。

但是,在您的情况下,您获得了一个令牌,并且没有看到您的模型代码(您刚刚提供了 getToken 函数,它看起来并不像它与特定模型相关联......?)然后我会如果其他地方不需要,请选择在您的控制器中调用它。否则,将其重构为service。引用 SailsJS 文档:

服务可以被认为是包含函数的库 您可能希望在应用程序的许多地方使用。例如, 您可能有一个包含一些默认电子邮件的 EmailService 您希望在您的许多部分中使用的样板代码 应用。在 Sails 中使用服务的主要好处是它们 是全球化的——你不必使用 require() 来访问它们。

我经常将自定义逻辑放在 ControllersModelsServices 中,但对于网络相关的逻辑等,我的偏好是: p>

  • 如果是一次性逻辑控制器。
  • 在需要可重用性时提供服务,或将代码封装为服务可提高应用程序的可读性/维护性

仅当您坚信逻辑和责任与该模型真正相关时才使用模型 - 此处应谨慎行事并谨慎使用。但我承认我的建议可能会被理解为主观的 - 它们是基于我认为一般意义上的良好 OOP 实践。

【讨论】:

  • 我正在尝试从服务器端 Sails 中向我的 API 发出 GET / POST 请求,但是:1-我不确定在哪里编写请求(模型或控制器)2-I '不确定请求是什么样的。
  • 抱歉,我不明白你在做什么。您所说的没有意义...请将您正在编写的相关代码放入您的问题中,并准确说明您认为您正在尝试做什么。
  • @MichiSalazar - 已更新答案。希望这可以帮助。如果您需要聊天,我们可以切换到使用 SOF 聊天室之一,但我希望我的指示是有意义的。看起来你在正确的轨道上!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
相关资源
最近更新 更多