首页 > 解决方案 > 基于 Promise 的 XHR 返回 Undefined - JS

问题描述

我正在 node.js 中构建一个 Web 服务器并调用我的 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 中测试相同的路由,它会给出正确的响应。

标签: javascriptnode.jsxmlhttprequest

解决方案


推荐阅读