XHR на основе обещаний возвращает Undefined - JS - PullRequest
0 голосов
/ 04 марта 2019

Я создаю веб-сервер в node.js и вызываю мой API для данных.Я хотел немного очистить код, создав функцию XHR (имена AJAX) и вызывая ее в каждом из маршрутов.Я понимаю, что этот вопрос задавался в нескольких вариантах, но даже выполняя все эти уроки, я не смог получить ответ.

XHR Функция:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

exports.request = obj => {
    return new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest();
        xhr.open(obj.method || "GET", obj.url);
        if (obj.headers) {
            Object.keys(obj.headers).forEach(key => {
                xhr.setRequestHeader(key, obj.headers[key]);
            });
        }
        xhr.onload = () => {
            if (xhr.status >= 200 && xhr.status < 300) {
                console.log(xhr.response);
                resolve(xhr.response);
            } else {
                console.log(xhr.statusText)
                reject(xhr.statusText);
            }
        };
        xhr.onerror = () => reject(xhr.statusText);
        xhr.send(obj.body);
    });
};

Как я это называю:

const AJAX = require('../ajax');

// G1: GET All Clubs
exports.get_all_clubs = (req, res, next) => {
    console.log('Return all Clubs:')
    AJAX.request({
            url: "http://localhost:3000/clubs",
            method: "GET"
        })
        .then(data => {
            // Log out Data
            console.log(JSON.parse(data));
        })
        .catch(error => {
            console.log(error);
        });
}

И ответ, который я получаю:

GET /clubs - - ms - -
Return all Clubs:
undefined
SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at AJAX.request.then.data (C:\Users\tyler\Desktop\Code\clubadmin\api\controllers\clubs.js:14:30)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)

API работает, и если я тестирую тот же маршрут в POSTMAN, он даетправильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...