Как использовать MongoDB / Nodejs с Express для извлечения данных сохранения для игры на основе JavaScript? - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь создать js браузерную игру с помощью Phaser, и я постоянно изучаю Nodejs, Expressjs и MongoDB, чтобы обслуживать ее. Я новичок в таких концепциях Nodejs, как async и тому подобное. Пока у меня есть сервер Node w / Express, выводящий HTML-файл, который вызывает мою игру, которая находится в JS-файле. Я смог общаться из моей игры с Nodejs, используя вызовы fetch и app.get для выполнения действий на Nodejs (например, отправлять сообщения Twilio)

Пример, просто чтобы убедиться, что я правильно понял:

в моей статической игре. 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
    }); 
}

И в моем Node 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 подается из моего Node index.js, когда пользователь подключается с помощью этого метода:

app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname,'index.html'));
});

Это прекрасно работает, но в моем тестировании я заметил, что не могу отправить данные с моего Node-сервера в файл клиента js, так как Nodejs является асинхронным.

Я хочу сохранить сохраненные пользовательские данные в БД Mongo, которая будет загружаться при каждом запуске для каждого конкретного пользователя. Желательно, чтобы я использовал эти данные в game.js для манипуляции.

Итак, мой вопрос: как мне получить данные из MongoDB в мой game.js? Или есть поток проектирования, на который я должен перейти, чтобы сделать это лучше?

(Также дайте мне знать, если моя схема именования файлов тупая и / или как ее улучшить)

1 Ответ

0 голосов
/ 15 января 2019

Прежде всего, я настоятельно рекомендую посмотреть некоторые учебные пособия по NodeJS перед началом работы.

Мне очень понравился этот урок о nodejs https://www.youtube.com/watch?v=0oXYLzuucwE&list=PL55RiY5tL51q4D-B63KBnygU6opNPFk_q

Теперь утверждение "Nodejs is async" является широким, чтобы описать, как узел работает асинхронно. NodeJS взаимодействует с базой данных асинхронно. Это одно из самых больших преимуществ узла. Особенно, когда вы масштабируете до 100 000 запросов каждую секунду, и выбор из базы данных становится вашей бутылочкой. Сделав эту операцию асинхронной, ваш сервер сможет продолжить обработку других запросов и возобновит обработку предыдущего запроса, только когда БД завершит выбор данных.

Помимо того, что ваш сервер выглядит великолепно, он должен передать index.html от имени пользователя root, но помимо этого HTML-страницы отправлять не нужно. Данные должны передаваться в формате JSON (хотя вы можете делать это с другими форматами, такими как XML или просто передавая строки) и возвращать httpResponse с соответствующими данными в теле.

Ваш клиент должен отвечать за выполнение http-запросов к серверу, используя java-скрипт (jquery и ajax) для получения этих данных.

И последнее, что у вашей клиентской стороны будет много кода Java-скрипта, который будет генерировать страницы по мере роста вашей игры. Я рекомендую использовать angular / ReactJS / VueJS в качестве фреймворка, который будет управлять вашей клиентской стороной.

Это много, чтобы проглотить, по крайней мере, это было для меня в начале, но есть много действительно хороших гидов.

...