Как получить XMLHttpRequest responseText, возвращенный внутри функции API express .router Nodejs - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь заставить мою функцию API возвращать ответ XML. Я знаю, что XMLHttpRequest asyn c. Я могу записать ответ, но не могу вывести ответ на один уровень выше. Как я могу добиться этого, чтобы моя express функция маршрутизатора возвращала ответ?

Я могу записать ответ следующим образом:

router.post('/frete', async(req,res) =>{

    try{

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {

            if (this.readyState === 4) {
                console.log(this.responseText)
            }
        };

        xhr.open("GET", someUrl);
        xhr.send();

        //return res.send('The elusive XML response')

    }catch(err){
        console.error(err);
        return res.status(500).send('Server error.')
    }

});

Я перепробовал много настроек этот responseText один уровень вверх в области видимости, так что моя функция API возвращает что-то, но безуспешно.

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

попробуйте это. Я добавил application/xml в заголовок, что означает, что он покажет xml в ответ, и я переместил res.send внутрь, если условие. потому что вы отправляете ответ в конце блока try, но до этого времени ваш someurl не разрешается.

router.post('/frete', async(req, res) =>{

    try{

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {

            if (this.readyState === 4) {
                console.log(this.responseText)
                res.type('application/xml');
                res.send(this.responseText);
            }
        };

        xhr.open("GET", someUrl);
        xhr.send();

    } catch(err) {
        console.error(err);
        return res.status(500).send('Server error.')
    }

});
1 голос
/ 13 апреля 2020

Вы уверены, что вместо post не должно быть get ?

с отправкой post на сервер, и вы запрашиваете отправку. ... чтобы восстановить (?) (извините, я нахожу это странным)

Получить ответ можно, выполнив синтаксический анализ в json и повторно отправив его как объект.

return JSON.stringify(this.responseText, undefined, 2);

идея ...

router.post('/frete', async(req, res) =>{

    try{

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {

            if (this.readyState === 4) {
                console.log("OK");
                retResp(this.responseText);
            }
        };

        xhr.open("GET", someUrl);
        xhr.send();

    } catch(err) {
       ....
    }


    function retResp(resp){
       console.log(resp);
       res.send(resp);
    }    

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