Express.js-如何在发送Get方法的结果之前等待Post方法

时间:2019-06-03 07:20:42

标签: javascript node.js express ionic-framework

您好,我正在使用Ionic框架并表示要在我的应用程序,服务器API和JavaScript游戏之间进行通讯。游戏使用XMLHttpRequest将一些信息发送到API并发布,而我的应用程序使用Angular / http中的Http检索了这些信息。

发布部分运行良好,我能够将信息发送到服务器,但是我在get部分方面苦苦挣扎。每次刷新页面时都会调用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);
    });

}

服务器的get和post方法是:

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 :(得分:0)

我认为您应该使用套接字在服务器和您的应用之间进行通信。

另一个更简单,效率更低的选项可能是在间隔函数中执行GET,因此您可以每隔X秒(例如,说1分钟)调用一次服务器来更新数据。这意味着您的应用程序一直在调用服务器,因此我强烈不建议这样做。

编辑:

我建议使用套接字,因为我偶尔使用此方法在服务器和应用程序之间进行通信,但是如果您只需要从服务器到应用程序的通信而反之亦然,则使用推送通知也是一个不错的选择。