Ответ не определен через клиент Ajax, но правильный URL-адрес истины - PullRequest
0 голосов
/ 16 декабря 2018

Я устанавливаю ajax-клиент с фиктивным сервером (только для тестирования).Кажется, мне удалось решить проблему cors, но ответ, как видно из ajax-клиента, не определен.Когда я получаю тот же URL-адрес, используя только мысль браузера, он правильно отображает объект.

// server-side
var express = require('express');
var router = express.Router();
var cors = require('cors');
router.use(cors());

var data = [
    {"id": 1, "message": 'first object'},
    {"id": 2, "message": 'second object'},
    {"id": 3, "message": 'third  object'}
];

router.get('/', (req, res, next) => {
    console.log("building response body");
    res.json(data);
});


// client-side
function fetcher() {
    console.log("fetch from:" + rootUrl + arrayEndpoint);
    fetch(rootUrl + arrayEndpoint, {
        mode: "cors",
        method: "GET",
        headers: {
            "Content-Type": "application/json"
        }
    })
        .then((response) => {
            console.log(response);
            console.log("response: " + response.body);
        })
        .catch((error) => {
            console.log("error: " + error);
        });
}

Ответ, напечатанный на консоли клиента:

Response { type: "cors", url: "https://angry-badger-63.localtunnel.me/getArray/", redirected: false, status: 200, ok: true, statusText: "OK", headers: Headers, bodyUsed: false }
undefined

И наbrowser:

[{"id":1,"message":"first object"},{"id":2,"message":"second object"},{"id":3,"message":"third  object"}]

Так что я почти уверен, что моя серверная сторона в порядке (она отправляет то, что я ожидаю, в браузер и насколько сложным может быть resp.json (объект)?), но, очевидно,Что-то о клиенте AJAX я не вижу.Что с ним не так?

1 Ответ

0 голосов
/ 16 декабря 2018

Принимая во внимание комментарий SLak, fetch не имеет отношения к телу, которое я, как я только что предположил, сортировал.Огромное слепое пятно там.

Это выявило еще одну проблему - а именно, что resp.json () (который был бы реальным способом справиться с этим) возвращает обещание, которое я не обрабатывал.На самом деле кажется, что анализ ответа (будь то с помощью .json () или .text ()) возвращает обещание в целом.Я до сих пор не совсем правильно понимаю массив, но, чтобы не отвлекаться от темы, приведу исправленный фрагмент для анализа общего объекта json:

//client.js
function fetcher() {
    console.log("fetch from:" + rootUrl + arrayEndpoint);
    fetch(rootUrl + arrayEndpoint,{
        mode: "cors",
        method: "GET",
        headers: {"Content-Type": "application/json"}
    })
        .then(function(response) {
            response.json()
                .then(function (data) {
                    console.log(data);
                });
        })
        .catch(error => console.log("error:" + error));
}


//server.js
var express = require('express');
var router = express.Router();
var cors = require('cors');
/* GET users listing. */
router.use(cors());

var data = {"1":{"id":1, "message": 'first object'},
  "2":{"id":2, "message": 'second object'},
  "3":{"id":3, "message": 'third  object'}};

router.get('/', function(req, res, next) {
  console.log("building response body")
  console.log(data)
  res.json(data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...