如何为JavaScript浏览器游戏从数据库保存和检索游戏保存?

时间:2019-01-16 00:37:59

标签: javascript node.js ajax mongodb phaser-framework

我有点困惑。

我有一个使用Phaser构建的客户端JS游戏,该游戏与运行服务器并提供游戏文件的Nodejs / Express应用捆绑在一起。我的意图是允许用户键入用户名并从数据库(最好是基于云的数据库(例如MongoDB Atlas))中检索保存的数据,因此我不必自己存储数据。

但是,由于Nodejs和JS的异步特性,我无法找到一种方法将数据库中的保存数据(可能只是JSON数据)获取到我的JS游戏代码中,因此我可以对其进行操作并运行该应用程序。当我想在JS中使用文本var或JSON变量之类的数据时,我在基于客户端的JS中使用AJAX看到的所有示例都只是用HTML呈现了数据。

我现在正在考虑的是将整个游戏置于回调函数中,并将AJAX调用的响应传递给MongoDB Stitch应用程序。

例如:

const client = stitch.Stitch.initializeDefaultAppClient('appname');

const db = client.getServiceClient(stitch.RemoteMongoClient.factory, 'mongodb-atlas').db('GameDB');

client.auth.loginWithCredential(new stitch.AnonymousCredential()).then(user =>
    db.collection('GameSaves')
    .updateOne({owner_id:client.auth.user.id}, {$set:{number:42}}, {upsert:true})).then(() =>
        db.collection('GameSaves').find({owner_id: client.auth.user.id}, { limit: 100}).asArray()
    ).then(startGame) //passes the docs to startGame()
    .catch(err => {
        console.error(err)
    });

但是我有种感觉是行不通的(在我的NodeJS fetch()测试中,我一直只是获得Promise对象而无法解析它们,即使在“ .then”块中也是如此),或者还有更好的方法为此。

我正试图避免使用localStore,以便让用户先在计算机上然后在手机上拉起游戏。

0 个答案:

没有答案