Node.js - express-handlebars Cambiar cabecera dinamicamente mediante peticiones al router

 
Vista:
sin imagen de perfil

express-handlebars Cambiar cabecera dinamicamente mediante peticiones al router

Publicado por Diego (1 intervención) el 09/08/2021 11:22:25

express-handlebars Cambiar cabecera dinamicamente mediante peticiones al router


Tengo express-handlebars versión ^5.3.2 y express versión ^4.17.1.
En la cabecera (un parcial que incluyo en la plantilla .hbs de express-handlebars) tengo el siguiente código (concretamente en una parte de la cabecera):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<div class="areaUsuario">
    {{#if registro }}
        <p>El usuario quiere registrarse.</p>
        {{> form_area_usuario}}
    {{/if}}
 
    {{#if inicioSesion}}
        <p>El usuario quiere iniciar sesión.</p>
        {{> form_area_usuario}}
    {{/if}}
 
    {{#if Usuario}}
        <div class="bienvenidoCliente">
            {{#if SexoUsuario}}
                <p class="saludoBienvenido">¡Bienvenida, {{Usuario}}!</p>
            {{else}}
                <p class="saludoBienvenido">¡Bienvenido, {{Usuario}}!</p>
            {{/if}}
        </div>
    {{else}}
        <div class="bienvenidoInvitado">
            <p>¡Bienvenid@, invitad@! Puedes <a href="#" id="enlaceIniciarSesion">Iniciar Sesión</a>.</p>
            <p>¿Aún no estás registrad@?<a href="#" id="enlaceRegistro">¡Hazlo ahora!</a></p>
        </div>
    {{/if}}
</div>
La idea es que, en el último caso, al darle a estos enlaces que aparecen en el div con la clase bienvenidoInvitado, se cree una petición al router del servidor que diga que se genere nuevamente esa misma vista en la que se encuentra el usuario(o si puede ser sólo la cabecera, tanto mejor) pero con el json (enviado como parámetro junto a la vista en el res.render) modificado para que esta vez sí reconozca registro o inicioSesion y, por tanto, en vez de .poner la frase de bienvenido debería mostrar el formulario del área de usuario que es otro parcial a su vez con este código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="registroInicioAreaUsuario">
    <form action="/usuarios" id="form_areaUsuarios" class="form_areaUsuarios">
        {{#if nuevoUsuario}}
            <input type="text" name="nombreUsuario" id="nombreUsuario" placeholder="usuario">
        {{/if}}
        <input type="email" name="emailUsuario" id="emailUsuario" placeholder="correo@electronico.com">
        <input type="password" name="contrasenaUsuario" id="contrasenaUsuario" placeholder="contraseña">
        {{#if nuevoUsuario}}
            <br>
            <input type="password" name="contrasenaUsuario2" id="contrasenaUsuario2" placeholder="repite contraseña">
        {{/if}}
        <br>
        <input type="reset" value="Borrar">
        <input type="submit" data-eleccion="{{textoData}}" value="{{textoSubmit}}">
    </form>
</div>
Lo he intentado con un fetch pero no lo logro. Lo tengo así el archivo público de scritps.js:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const areaUsuario = document.querySelector(".areaUsuario");
const primerElementoAreaUsuario = areaUsuario.firstElementChild;
if(primerElementoAreaUsuario.className === "bienvenidoInvitado") {
    const iniciarSesion = areaUsuario.querySelector("#enlaceIniciarSesion");
    const registros = areaUsuario.querySelector("#enlaceRegistro");
 
    iniciarSesion.addEventListener('click', e => {
        e.preventDefault();
 
        fetch('/', {
            method: "POST",
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ inicioSesion: true })
        })
        .then(res => res.json())
        .then(res => {
            console.log("La respuesta del servidor es la siguiente:",res);
        })
 
    });
}
Lo he intentado con POST y con GET de varias maneras. Pero aunque reciba la respuesta, no sé recargar la página y hacer que recargue con ese objeto json.

En el router tengo así la ruta:
1
2
3
4
5
6
7
8
9
10
11
12
ruter.post('/', (req, res) => {
    const inicioSesion = req.body.inicioSesion;
    const registro = req.body.registro;
    let jsonBase = { estilo: 'inicio' }
 
    if(typeof inicioSesion != "undefined") {
        jsonBase.inicioSesion = true
    } else if(typeof registro != "undefined") {
        jsonBase.nuevoUsuario = true
    }
    res.render('inicio', jsonBase)
})
Quizá haya otra forma más sencilla de hacerlo pero no caigo o no la conozco.
¡Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

express-handlebars Cambiar cabecera dinamicamente mediante peticiones al router

Publicado por Isaac Grimaldo (4 intervenciones) el 05/11/2021 12:36:02
Creo que la página no cambia por cuando no estás usando react.js o Vue el estado de tu app no cambia, y puede cuando se recargue la página toda la información claras si no estás usando el localStorages , cache o cookies, espero haberte ayudado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar