如何使用 MongoDB/Nodejs 和 Express 检索基于 JavaScript 的游戏的保存数据?
How to use MongoDB/Nodejs with Express to retrieve save data for a JavaScript-based game?
我正在尝试使用 Phaser 构建一个 js 浏览器游戏,并且我一直在学习 Nodejs、Expressjs 和 MongoDB 来提供它。我对异步等 Nodejs 概念不熟悉。到目前为止,我的 Node w/ Express 服务器输出了一个 HTML 文件,该文件调用了我在 JS 文件中的游戏。我已经能够使用获取和 app.get 调用在 Nodejs 上执行操作(例如发送 Twilio 消息)
从我的游戏到 Nodejs 进行通信
举个例子,只是为了确保我的流程正确无误:
在我的静态里game.js~
function sendSMS() {
var url = 'http://localhost:6000/index';
fetch(url).then(function(res) {
console.log(res.text()); //just some confirmation message, outputs as a Promise
});
}
在我的节点中index.js~
app.get('/index', function (req, res) {
var text = 'YOU FLUSHED THE TOILET'; \for the game
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);
client.messages
.create({
body: text,
from: process.env.FROM_NUMBER,
to: process.env.TO_NUMBER
})
.then(message => console.log(message.sid))
.done();
res.send("USER HAS BEEN NOTIFIED THAT THEY FLUSHED THE TOILET");
})
当用户通过此方法连接时,我的 html 网页引用 game.js 从我的节点 index.js 提供:
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname,'index.html'));
});
效果很好,但在我的测试中我注意到我无法将数据从我的 Node 服务器发送到 js 客户端文件,因为 Nodejs 是异步的。
我想将保存的用户数据存储在 Mongo 数据库中,以便在每个特定用户每次启动时加载。我最好将这些数据放入 game.js 进行操作。
所以我的问题是,我应该如何从 MongoDB 中获取数据到我的 game.js?或者是否有我应该改用的设计流程来使它变得更好?
(如果我的文件命名模式很笨,请告诉我 and/or 如何改进)
首先,我强烈建议您在开始之前先观看一些 NodeJS 教程。
我真的很喜欢这篇关于 nodejs 的教程
https://www.youtube.com/watch?v=0oXYLzuucwE&list=PL55RiY5tL51q4D-B63KBnygU6opNPFk_q
现在语句 "Nodejs is async" 描述节点如何异步工作太宽泛了。 NodeJS 以异步方式与数据库交互。这是节点的最大好处之一。尤其是当你扩展到每秒 100,000 个请求时,从数据库中进行选择成为你的瓶颈。
通过使该操作异步,您的服务器可以继续处理其他请求,并且仅当数据库完成选择数据时才返回处理先前的请求。
此外,您的服务器看起来不错,它应该以 root 身份通过 index.html,但除此之外,不需要发送 html 页面。数据应以 JSON 格式传递(尽管您可以使用其他格式如 XML 或仅传递字符串)并且应该 return httpResponse 在正文中包含相关数据。
您的客户端应该负责向服务器发出 http 请求,使用 java 脚本(jquery 和 ajax)以获取该数据。
最后一件事,您的客户端将拥有大量 java 脚本代码,这些代码将随着游戏的发展生成页面。我建议使用 angular/ReactJS/VueJS 作为管理客户端的框架。
要吞下很多东西,至少一开始对我来说是这样,但那里有很多非常好的指南。
我正在尝试使用 Phaser 构建一个 js 浏览器游戏,并且我一直在学习 Nodejs、Expressjs 和 MongoDB 来提供它。我对异步等 Nodejs 概念不熟悉。到目前为止,我的 Node w/ Express 服务器输出了一个 HTML 文件,该文件调用了我在 JS 文件中的游戏。我已经能够使用获取和 app.get 调用在 Nodejs 上执行操作(例如发送 Twilio 消息)
从我的游戏到 Nodejs 进行通信举个例子,只是为了确保我的流程正确无误:
在我的静态里game.js~
function sendSMS() {
var url = 'http://localhost:6000/index';
fetch(url).then(function(res) {
console.log(res.text()); //just some confirmation message, outputs as a Promise
});
}
在我的节点中index.js~
app.get('/index', function (req, res) {
var text = 'YOU FLUSHED THE TOILET'; \for the game
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);
client.messages
.create({
body: text,
from: process.env.FROM_NUMBER,
to: process.env.TO_NUMBER
})
.then(message => console.log(message.sid))
.done();
res.send("USER HAS BEEN NOTIFIED THAT THEY FLUSHED THE TOILET");
})
当用户通过此方法连接时,我的 html 网页引用 game.js 从我的节点 index.js 提供:
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname,'index.html'));
});
效果很好,但在我的测试中我注意到我无法将数据从我的 Node 服务器发送到 js 客户端文件,因为 Nodejs 是异步的。
我想将保存的用户数据存储在 Mongo 数据库中,以便在每个特定用户每次启动时加载。我最好将这些数据放入 game.js 进行操作。
所以我的问题是,我应该如何从 MongoDB 中获取数据到我的 game.js?或者是否有我应该改用的设计流程来使它变得更好?
(如果我的文件命名模式很笨,请告诉我 and/or 如何改进)
首先,我强烈建议您在开始之前先观看一些 NodeJS 教程。
我真的很喜欢这篇关于 nodejs 的教程 https://www.youtube.com/watch?v=0oXYLzuucwE&list=PL55RiY5tL51q4D-B63KBnygU6opNPFk_q
现在语句 "Nodejs is async" 描述节点如何异步工作太宽泛了。 NodeJS 以异步方式与数据库交互。这是节点的最大好处之一。尤其是当你扩展到每秒 100,000 个请求时,从数据库中进行选择成为你的瓶颈。 通过使该操作异步,您的服务器可以继续处理其他请求,并且仅当数据库完成选择数据时才返回处理先前的请求。
此外,您的服务器看起来不错,它应该以 root 身份通过 index.html,但除此之外,不需要发送 html 页面。数据应以 JSON 格式传递(尽管您可以使用其他格式如 XML 或仅传递字符串)并且应该 return httpResponse 在正文中包含相关数据。
您的客户端应该负责向服务器发出 http 请求,使用 java 脚本(jquery 和 ajax)以获取该数据。
最后一件事,您的客户端将拥有大量 java 脚本代码,这些代码将随着游戏的发展生成页面。我建议使用 angular/ReactJS/VueJS 作为管理客户端的框架。
要吞下很多东西,至少一开始对我来说是这样,但那里有很多非常好的指南。