Angular 2 HTTP请求问题

时间:2016-09-17 10:26:59

标签: express angular typescript

真的希望有人可以帮助我。

我要做的是:为json调用REST API并解决Angular 2的承诺。

运行Node.js / ExpressJS / Lodash的ServerAPI

Server.js文件:

var activeNumber = [
    { name: 'no 1' },
    { name: 'no 2' },
    { name: 'no 11' },
    { name: 'no 3' },
    { name: 'no 10' }
];

var numberRe = new RegExp('\\d+');

var getCustomNumber = function () {
    var top = 0;
    for (var i = 0; i < activeNumber.length; i++) {
        var present = numberRe.exec(activeNumber[i].name);
        if (present) {
            var neno = parseInt(present[0]);
            if (!isNaN(neno) && neno > top) {
                top = neno;
            }
        }
    }
    return top;
};

执行测试http://localhost:1337/GetData?search=colorado并返回一个vaild json对象。

ClientAPI

调用HTTP请求的服务文件:

var express = require('express');
var app = express();
var bodyParser = require("body-parser");
var data = require('./data.json');
var _ = require('lodash');
var cors = require('cors');


app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());


app.get('/GetData', function (req, resp) {

if (req.query.search != null) {

    var result = _.find(data, function (o) {
        return o.value === req.query.search.toLowerCase().trim()
    });

    return resp.send(result)

} 

});

    app.listen(1337, function () {
    console.log('Listening at Port 1337'); 
}); 

作为ClientAPI中的本地json文件的模拟数据的解析非常有效。我需要让api查询类型的if函数起作用。

Angular应用程序启动没有问题,并且运行http.get而没有错误。我检查了dev工具下的网络选项卡,可以看到HTTP请求已完成并返回其响应是我想要解析的有效JSON对象,例如有返回的数据。然而,我解决这个问题的表格是空白的。

我做错了什么!

1 个答案:

答案 0 :(得分:0)

问题出现在这里:

this.http.get(url)
   .map(resp => resp.json())
   .subscribe(getData => data = getData);

resolve(data);

您订阅了observable,但是当您之后直接致电resolve时,它尚未“解决”。这意味着你真的只是在呼叫resolve([])

相反,做这样的事情:

this.http.get()./*...*/.subscribe(result => resolve(result));

您可能还想查看Observables上的toPromise方法以及直接构造已解决的promise的方法。