Express.js - как мне ждать метод Post перед отправкой результата метода Get - PullRequest
0 голосов
/ 03 июня 2019

Здравствуйте! Я использую Ionic Framework и Express для связи между моим приложением, серверным API и игрой на JavaScript. Игра отправляет некоторую информацию в API с помощью XMLHttpRequest и отправляет, и мое приложение получает эту информацию, используя Http из angular / http.

Почтовая часть работает хорошо, и я могу отправить информацию на сервер, но я борюсь с получением части. Метод get вызывается каждый раз, когда обновляется моя страница, но в настоящее время игра не отправляет данные, и когда это происходит, метод get больше не вызывается, поэтому я никогда не получаю данные с сервера.

игра отправляет такую ​​информацию:

function sendFriendToInvite(friend, callback) {
    var req = new XMLHttpRequest();
    req.open('POST', 'http://localhost:3001/sendInvite');
    req.setRequestHeader('Content-Type', 'application/json');
    req.send(JSON.stringify({friend: friend}));


    req.addEventListener('load', () => {
        console.log(req.responseText);
        var results = JSON.parse(req.responseText);

        //if(results.error) return console.log(results.error);

        if(callback) callback(results);
    });

    req.addEventListener('error', (e) => {
        console.log('an error occured');
        console.log(e);
    });

}

метод получения и отправки сервера:

var friendToInvite;

/**Send from the game**/
api.post('/sendInvite', function(req, res) {
    console.log("posts! " + req.body.friend);
    friendToInvite = req.body.friend;
    res.send({message: 'friend reçu'})
});

/**retrive by the application **/
api.get('/sendInvite', function(req, res) {
    console.log("get friend to invite");
//here I need friendToInvite be initialised by the post method before sending the response
    res.json({friend: friendToInvite});
});

приложение получает такую ​​информацию:

this.http.get('http://localhost:3001/sendInvite').pipe(
            map(res => res.json())
            ).subscribe(response => {
                console.log('GET Response:', response);
            });

Я хочу, чтобы приложение получало данные, когда игра отправляет данные.

1 Ответ

0 голосов
/ 03 июня 2019

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

Еще один более простой и менее эффективный вариант может заключаться в том, чтобы выполнять функцию GET в интервале, чтобы вы могли вызывать сервер каждые X секунд.(скажем, 1 минута, например), чтобы обновить данные.Это означает, что ваше приложение постоянно обращается к серверу, и я настоятельно не рекомендую его.

РЕДАКТИРОВАТЬ:

Я предложил использовать сокеты, потому что я иногда использовал этот метод для связи между сервером и приложением, но этотакже будет хорошим вариантом, если вам нужно только общение с сервером с приложением, а не наоборот, для использования push-уведомлений.

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