Как хранить и обновлять переменную в ejs, обращаться к ней по разным маршрутам - PullRequest
1 голос
/ 20 сентября 2019

Я абсолютный новичок в отношении javascript, express, node, ejs и т. Д., Пожалуйста, будьте осторожны со мной.: D

Я создаю сайт, который представляет собой галерею моих проектов.Вы можете увидеть их сетку, и можете посмотреть живую версию, просто нажав на GIF.Каждый проект (две мини-игры) при нажатии на него идет по разному маршруту (/ squareTap, / guessColor).Теперь я хочу внедрить другой язык в веб-сайт.Я добавил выпадающий список, с помощью которого вы можете выбрать нужный язык.Работает на главной странице, хорошо меняет текст.Но когда вы переходите в какой-либо проект, эта информация теряется ... И мне нужно, чтобы игра узнала, на каком языке должно отображаться предупреждение об эпилепсии, и, соответственно, изменила описание игры.

Таков сайтструктурированный: запустить с "node app.js";каждому файлу ejs соответствуют свои файлы js и css

//app.js
require('dotenv').config();
const express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    https = require('https'),
    http = require('http'),
    fs = require('fs');

var setToEnglish = false;
// app.locals.setToEnglish = false;

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + '/views'));
app.use('/node_modules', express.static(__dirname + '/node_modules/'));
app.use('/sounds', express.static(__dirname + '/sounds/'));
app.use('/images', express.static(__dirname + '/images/'));
app.set('view engine', 'ejs');

const options = {
    key: fs.readFileSync('key.pem'),
    cert: fs.readFileSync('cert.pem')
};

app.get("/", function(req, res){
    res.render("main", { setToEnglish : setToEnglish});
});

app.get("/squareTap", function(req, res){
    res.render("squareTap", { setToEnglish : setToEnglish});
});

app.get("/guessColor", function(req, res){
    res.render("guessColor", { setToEnglish : setToEnglish});
});

https.createServer(options, app)
.listen(process.env.HTTPS_PORT, function () {
    console.log('Serving the https');
});

http.createServer(function (req, res) {
    res.writeHead(301, { 'Location': 'https://www.' + process.env.DOMAIN});
    res.end();
}).listen(process.env.HTTP_PORT);

Я пробовал глобальную переменную ejs (если так она называется).По сути, я создал переменную setToEnglish в app.js, передавая ее каждому представлению (файлы ejs), не мог понять, как передать ее в файл js, поэтому я сделал объявление функции внутри файла ejs и выполнил их в js каждыйвремя пользователь меняет язык, нажимая на выпадающий список.

<script>
        function setGlobalToEnglish() {
            <% setToEnglish=true %>;
        }
        function setGlobalToPolish() {
            <% setToEnglish=false %>;
        }  
</script>

Это не сработало, оно изменило переменную, но только в области действия текущего файла.Когда пользователь щелкнул по проекту, он все еще получил неизменное значение по умолчанию.

Я читал о res.locals, app.locals и немного попробовал, но не смог заставить его работать.Файлы Js и EJS ничего не распознали.

Это моя цель: мне нужен какой-то способ узнать, какой язык пользователь установил, он должен меняться в зависимости от того, что пользователь нажал, быть доступным для файлов представлений (внутри ихбыло бы здорово)Первое, что нужно сделать играм, это проверить язык и, соответственно, отредактировать текст.

Пожалуйста, помогите

Редактировать 1: я объявил setToEnglish в качестве глобальной переменной (внутри app.js), сначала- удалив var часть.Затем я попытался console.log(setToEnglish); внутри main.js, получил неопределенную ошибку, затем в main.ejs, внутри <script></script>, также получил неопределенную ошибку.Затем я изменил объявление переменной на эту форму global.setToEnglish = false и попытался снова.Получение неопределенной ошибки во всех случаях.

Редактировать 2: Не удалось выяснить это, поэтому я изменил подход.Я избавился от выпадающего списка изменений языка и добавил оператор if к каждому из моих представлений, которые не будут делать именно то, что я хотел, но достаточно близко.Он определяет предпочитаемый язык пользователя, проверяя настройки его браузера, и соответственно меняет текст на сайте.

let preferredLanguage = window.navigator.language;
if(preferredLanguage.includes('en')) { 
  //changing text to english 
} else if(preferredLanguage.includes('pl')) {
  //changing text to polish
} ...
...