【问题标题】:AngularJS $http returns null data, status -1AngularJS $http 返回空数据,状态 -1
【发布时间】:2018-01-26 21:34:01
【问题描述】:

我是 Node.js 和 AngularJS 的新手。我正在使用 MEAN 堆栈来开发一个访问定义的 Web 服务的网站。当我使用$http 时,它总是返回空数据。这是我的sn-ps:

vendor.service.js 文件:

(function () {
'use strict';

angular
    .module('app')
    .factory('VendorService', Service);




function Service($http, $q) {
    var service = {};
    //Store
    service.GetCurrent = GetCurrent;//st_details
return service;

    function GetCurrent() {
        return $http('http://localhost:3000/api/vendors/st_details').then(handleSuccess, handleError);
    }
function handleSuccess(res) {
        alert('hi3');
        alert(res.data);
        return res.data;
    }

    function handleError(res) {
        alert('hi2');
        alert(JSON.stringify(res));
        return $q.reject(res.data);
    }
}

})();

回复是:

{
  "data": null,
  "status": -1,
  "config":
  {
    "method": "GET",
    "transformRequest": [null],
    "transformResponse": [null],
    "url": "http://localhost:3000/api/vendors/st_details",
    "headers":
    {
      "Accept": "application/json, text/plain, */*",
      "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI1OWRlMjY5Y2UyMzY3NGMyMWQzNDNkNWYiLCJpYXQiOjE1MTY5MzU5NTUsImV4cCI6MTUxNjk3OTE1NX0.F9p9n9lMIgABKjv7CsAgzlxg7NtOzU6R1CDOsD6lBbI"
    }
  },
  "statusText": ""
}

我不知道如何在发送前打印 req json。此外,它在 Boomerang 上运行良好,但在页面上运行良好。

您能帮我解决这个问题吗?

【问题讨论】:

  • 你能确保后端收到请求并返回适当的数据吗?代码看起来总体上“没问题”。
  • 谢谢菲利普!但是当我检查 Boomerang chorme 扩展时,后端工作正常。
  • 您是否尝试过像这样调用后端:$http('/api/vendors/st_details')。我假设 Angular 再次自行添加了 baseUrl。
  • 是的,当我的服务和应用程序位于同一个端口时,这是有效的。但我想将应用程序和服务分开。所以在 3000 端口上运行服务和应用程序在 4000 端口上运行。
  • var request = require('request');在另一个控制器之一中工作正常。但我无法在 vendor.service.js 中使用此请求。谁能帮我。谢谢一百万!

标签: angularjs node.js express


【解决方案1】:

在控制器而不是服务中解开承诺。只需在服务中返回http req。

(function () {
'use strict';

angular
    .module('app')
    .factory('VendorService', Service);

function Service($http, $q) {
    var service = {};
    //Store
    service.GetCurrent = GetCurrent;//st_details
return service;

    function GetCurrent() {
        return $http('http://localhost:3000/api/vendors/st_details')
    }

}

你的控制器应该是。

VendorService.GetCurrent().then(handleSuccess, handleError);

function handleSuccess(res) {
    alert('hi3');
    alert(res.data);
    return res.data;
}

function handleError(res) {
    alert('hi2');
    alert(JSON.stringify(res));
    return $q.reject(res.data);
}

【讨论】:

  • 感谢您的快速回复!它对代码流没有影响。输出也是一样的。
猜你喜欢
  • 2017-09-27
  • 2017-05-13
  • 2017-08-10
  • 2015-01-12
  • 2015-02-16
  • 2015-01-24
  • 2023-03-23
  • 2021-02-20
  • 1970-01-01
相关资源
最近更新 更多