【问题标题】:Using API with Node & Angular将 API 与 Node 和 Angular 一起使用
【发布时间】:2016-02-18 09:46:31
【问题描述】:

尝试使用 Node 和 Angular 构建语言翻译消息传递应用程序。使用一个叫做 Yandex 的 API(谷歌翻译不是免费的)。 www.yandex.com

我不确定我是否有正确的方法,这是我第一次在我的项目中实现 API。

所以我有一个简单的表格

<div ng-controller="messageController">
    <h4>Send Message</h4>
    <form>
        <textarea name="message" ng-model='message.msg'></textarea>
        <input type="submit" value="Send" ng-click='sendMessage()' class="btn btn-info">
    </form>
</div>

发送到消息控制器

myapp.controller('messageController', function($scope, messageFactory, $location, $rootScope) {
        $scope.sendMessage = function(){
            console.log("Inside sendMessage()" + $scope.message.msg)
            messageFactory.translateMessage($scope.message.msg, function (data){
                console.log(data);
            })
        }
})

这是使用我的 api 密钥进行 API 调用的工厂。

myapp.factory('messageFactory', function($http, $location) {
        var factory = {};
        factory.translateMessage = function(info, callback) {
            console.log("Inside Message Factory-Traslate", info)

            $http.get('https://translate.yandex.net/api/v1.5/tr.json/translate?key=<ENTER_KEY_HERE>&text='<info>'&lang=<ga>&[format=<plain>]').success(function (output){
                callback(output);
            })
        }
        return factory;
    });

PS:我显然已经更换了这里的钥匙。

这是https://tech.yandex.com/translate/doc/dg/reference/translate-docpage/#JSON 之后的链接。

虽然感觉这不是我应该进行 API 调用的方式。

如何发出 API 请求并取回响应?

提前致谢。

【问题讨论】:

  • 我可以知道这里的具体问题是什么吗?
  • 您是否测试过您的解决方案?你有错误或有什么不对吗?
  • 是的,我做到了,它根本没有返回任何数据。
  • 你应该返回一个 promise($http.get 已经返回一个)而不是回调。

标签: javascript angularjs api


【解决方案1】:

您必须提供有关您遇到的错误的更多信息,但在您的代码中,您进行 API 调用的位置,URL 应该类似于 -

var url = 'https://translate.yandex.net/api/v1.5/tr.json/translate?key=' + key + '&text=' + info + '&lang=ga&format=plain'

所以你的代码看起来像这样 -

var key = 'yourActualKey'
var url = 'https://translate.yandex.net/api/v1.5/tr.json/translate?key=' + key + '&text=' + info + '&lang=ga&format=plain'

$http.get(url).success(function (output) {
    callback(output)
})

您不必将 或 [] 作为参数的一部分。这些仅用于表示占位符和可选参数[]。

另外我建议使用.then 而不是.success 来处理你的承诺。

Official docs on $http

【讨论】:

  • 非常感谢,采纳了你的建议,效果很好。但我的承诺是 .success。还没有将其更改为 .then。有什么区别 ?好的,我看到官方文档,我检查一下。
  • angular 正在弃用它的 .success 承诺方法,所以在未来,这些可能根本不起作用..你也可以阅读this
猜你喜欢
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 2017-08-23
  • 2016-09-17
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多