Natviescript Angular2 HTTP

Я работаю над проектом angular2 + nativescript, используя этот начальный проект, и я не могу сделать простой вызов HTTP POST, используя этот код

return this.http.post(`${AppConfigService.API_PATH}/login`, body, options)
          .map(res => res.json())
          .catch((err: any) => {
            return Observable.throw(err);
          });

этот код отлично работает в обычном приложении angular2, но в собственном скрипте выдает ошибку: Ответ со статусом: 200 для URL: null

Я также зарегистрировал проблему на Github: https://github.com/NativeScript/NativeScript/issues/ 2536


person Zeeshan Jan    schedule 31.07.2016    source источник
comment
Вы решили эту проблему? Я с такой же проблемой и я не знаю, что делать.   -  person Douglas Franco    schedule 17.02.2017


Ответы (2)


Вам необходимо использовать HTTP-модуль NativeScript, здесь находятся документы. Различные мобильные платформы работают иначе, чем обычный браузер, поэтому вам нужен базовый модуль {N} для управления различными API-интерфейсами для конкретных платформ. JSON POST будет выглядеть так:

var result;

http.request({
    url: "https://httpbin.org/post",
    method: "POST",
    headers: { "Content-Type": "application/json" },
    content: JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" })
}).then(function (response) {
    // result = response.content.toJSON();
    // console.log(result);
}, function (e) {
    // console.log("Error occurred " + e);
});

и вы должны убедиться, что используете var http = require("http");

person George Edwards    schedule 01.08.2016

вы можете использовать собственный скрипт http с angular, следующий пример:

первый импорт http служит в верхней части сервисного компонента

var http = require("http");

в файле sevice.ts вам нужно преобразовать обещание http в наблюдаемое.

//GET Example
    getList(): Observable<News[]> {
        return Observable.fromPromise(
                    http.getJSON(serverConfig.apiUrl+"news")
                ).map(function(res:any) {
                    console.log('finished sendign request'); 
                    return res as News[] 
                } );

    }


//POST EXAMPLE

submitFormData(data): Observable<Forms> {
        let url:string=serverConfig.apiUrl+"forms/";
        let headers:any = { 'Content-Type': 'application/json', 'Authorization': 'Bearer '+this.appSettings.getString("access_token")};
        let req:any={
            url:url,
            method: "post",
            headers:headers,
            content: JSON.stringify(data)
        };

        return Observable.fromPromise(
                    http.getJSON(req)
                ).map(function(res:any) {
                    return res as Forms 
                } );
    }

затем вы можете подписаться на наблюдаемое, как и раньше,

this.newsService.getList().subscribe((res) => {
    this.news= res;
});

Примечание. Теперь вы можете удалить статус импорта углового http, поскольку он не нужен.

person Mahdi    schedule 12.03.2017