Actualmente estoy trabajando en una aplicación simple con nodejs y express. Cargo un número aleatorio, el usuario traduce ese número al español y el usuario lo envía. Luego necesito comparar la respuesta del usuario con la traducción real para ver si el usuario estaba en lo correcto.
La ruta para mi página principal es bastante simple: renderizo un diseño con un número aleatorio para el nivel dado de un usuario en el juego, junto con un sustantivo aleatorio (ambas son solo funciones que he requerido de un archivo separado).
app.get('/', catchError(async (req, res) => { res.render("layout", { num: randNumForLevel(0), noun: randNoun(), }); }))Sin embargo, aquí está mi desafío: cuando el usuario hace clic en "enviar", necesito comparar su respuesta con la traducción real al español (en este caso es para el número "20"). Sin embargo, de la forma en que he estructurado el código actualmente, generé el número y lo pasé directamente a mi vista, lo que significa que no tengo acceso a él en el próximo ciclo de solicitud/respuesta.
Así que mi pregunta es la siguiente: ¿dónde debo almacenar este número generado aleatoriamente (en este caso, "20") para tener acceso a él cuando el usuario envíe el formulario? ¿Debo ponerlo en la sesión? app.locals? ¿en algún otro lugar? No estoy seguro de cuál es la mejor práctica, así que me encantaría algún consejo.
El principal problema de enviar la traducción real y el número generado aleatoriamente es que el cliente puede engañar fácilmente y ver la traducción.
Creo que necesitas reestructurar la forma en que envías el número.
Solo como ejemplo, usaría una base de datos para almacenar los números del nivel 1 con el siguiente esquema:
{ id: '1', number: 20, level: '1' }Siempre puede almacenarlos en la memoria como un objeto JavaScript y filtrarlos por nivel.
const my_db = { level1: [ { id: '1', number: 10, level: '1', answer: 'diez' }, ] } // create challenge programmatically let randNum = randNumForLevel(0) let noun = randNoun() let answer = getTranslationFor(randNum) my_db.level1.push({ id: '2', number: randNum, answer: answer })Envía el id del desafío y el número aleatorio al cliente. La respuesta del cliente debe tener la identificación del desafío y la traducción del usuario.
Busque la identificación dada en su base de datos u objeto js, compare la traducción del usuario y la traducción correcta y estará listo para comenzar
¡Agradable! ahora tiene una forma de comparar los números sin enviar la traducción real.