首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2 HTTP请求问题

角2 HTTP请求问题
EN

Stack Overflow用户
提问于 2016-09-17 10:26:59
回答 1查看 385关注 0票数 0

真希望有人能帮我。

我要做的是:为json调用REST,并解析一个角2承诺。

运行Node.js/ExpressJS/Lodash的ServerAPI

Server.js文件:

代码语言:javascript
复制
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'); 
}); 

作为测试的http://localhost:1337/GetData?search=colorado运行,并返回一个vaild对象。

ClientAPI

调用HTTP请求的服务文件:

代码语言:javascript
复制
import {Injectable} from "@angular/core";
import {Http} from "@angular/http";
import {Config} from "../config";
import {SearchResult} from "../models/search-result.model";
import {MockSearchData} from "../mock/mock-search-results";
import {Observable} from 'rxjs/Rx';
import 'rxjs/add/operator/map';


@Injectable()
export class ApiDataService {

    constructor(private http:Http) {
    }

    public     performSearchRequest(searchTerm:string,queryType:string):Promise<SearchResult[]>     {
    return new Promise<SearchResult[]>((resolve, reject) => {

        let url = Config.apiBaseUrl + Config.searchApi;
        url += "?search=" + searchTerm;

        console.log("Your query to be: " + url);

        if (searchTerm != "") {

            if (queryType == 'mock') {

                resolve(MockSearchData);


            } else if (queryType == 'api') {

                let data = [];

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

                resolve(data);

            } else {

                reject("No query type found.");

            }

        } else {

            reject("Please enter a search term.");

        };

    });
}
}

模拟数据的解析(它是ClientAPI中的本地json文件)非常有效。我需要获得if函数,api查询类型才能工作。

该角应用程序开始时没有问题,并运行http.get没有错误。我检查了dev tools下的网络选项卡,可以看到完成了HTTP请求,并返回它的响应是我想要解决的有效JSON对象,例如,数据正在返回。然而,我要把它分解成的桌子却是空白的。

我做错什么了!

EN

回答 1

Stack Overflow用户

发布于 2016-09-17 10:49:52

这个问题发生在这里:

代码语言:javascript
复制
this.http.get(url)
   .map(resp => resp.json())
   .subscribe(getData => data = getData);

resolve(data);

您订阅了可观察到的内容,但当您随后直接调用resolve时,它还没有“解决”。这意味着你真的只是打电话给resolve([])

相反,可以这样做:

代码语言:javascript
复制
this.http.get()./*...*/.subscribe(result => resolve(result));

您还可能希望查看可观察性方面的toPromise方法,以及直接构造已解决的承诺的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39545729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档