0
votes

Impossible de trouver la balise de fermeture correspondante pour "<%"

J'essaye d'accéder aux variables passées du serveur au client avec ejs

Mon fichier serveur:

Could not find matching close tag for "<%".

Mon fichier client:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" const="text/html;charset=UTF-8"/>
    <link href="http://fonts.googleapis.com/css?family=Comfortaa" rel="stylesheet" type="text/css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
    <title>Simple Chat App</title>
</head>

<body>
<header>
    <h1>Super Chat</h1>
</header>

<section>
    <div id="change_username">
        <input id="username" type="text"/>
        <button id="send_username" type="button">Change username</button>
    </div>
</section>

<section id="chatroom">
    <section id="feedback"></section>
</section>


<section id="input_zone">
    <input id="message" class="vertical-align" type="text"/>
    <button id="send_message" class="vertical-align" type="button">Send</button>
</section>

<script src="http://code.jquery.com/jquery-latest.min.js"></script>

<script type="text/javascript">
    <% var user = <% user %> %>
    console.log(user);
</script>
<script src="chat.js"></script>
</body>
</html>

J'obtiens une erreur:

router.get('/', function (req, res, next) {
    res.render('chat', {user: req.user, message: null});
});

Comment résoudre ce problème?


2 commentaires

remplacer <% var user = <% user%>%> par var user = <% user%>


@PHPNinja - Cela corrigera l'erreur, mais ne fonctionnera toujours pas.


3 Réponses :


4
votes
<script>
    const user = <%- JSON.stringify(user); %>
    console.log(user);
</script>

Vous ne pouvez pas imbriquer des blocs . Vous êtes soit en mode EJS, soit en dehors de celui-ci. Vous ne pouvez pas passer en mode EJS Extra Deep.


De plus, vous ne pouvez pas non plus simplement sortir une variable dans le JS côté client. Vous devez générer le code source JavaScript à partir de la variable. JSON.stringify est un bon moyen de générer des littéraux d'objet, de tableau et de chaîne à partir d'objets, de tableaux et de chaînes.

<% var user = <% user %> %>

Notez que l'utilisation de pour afficher sans échappement pour HTML.


0 commentaires

-1
votes

On dit qu'il ne peut pas trouver de balise de fermeture pour votre modèle EJS. Vous n'avez pas besoin de la notation de modèle EJS environnante dans le script.

<script type="text/javascript">
var user = '<%= user %>'
console.log(user);
</script>


2 commentaires

<% = effectue un échappement HTML, pas un échappement JS.


Il donne une sortie erronée si (a) user n'est pas une chaîne ou (b) user est une chaîne contenant un & ou < et il casse le script s'il s'agit d'une chaîne contenant un '.



-1
votes

Le problème est ici, il vous suffit de remplacer la valeur de l'utilisateur dans le modèle.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" const="text/html;charset=UTF-8"/>
    <link href="http://fonts.googleapis.com/css?family=Comfortaa" rel="stylesheet" type="text/css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>
    <title>Simple Chat App</title>
</head>

<body>
<header>
    <h1>Super Chat</h1>
</header>

<section>
    <div id="change_username">
        <input id="username" type="text"/>
        <button id="send_username" type="button">Change username</button>
    </div>
</section>

<section id="chatroom">
    <section id="feedback"></section>
</section>


<section id="input_zone">
    <input id="message" class="vertical-align" type="text"/>
    <button id="send_message" class="vertical-align" type="button">Send</button>
</section>

<script src="http://code.jquery.com/jquery-latest.min.js"></script>

<script type="text/javascript">
    var user = "<%= user %>" // problem is here 
    console.log(user);
</script>
<script src="chat.js"></script>
</body>
</html>

Code mis à jour

 var user = "<%=user%>" // Please change this line 

J'espère que cela vous aidera.


2 commentaires

var user = <% user%> ne fonctionnera pas. <% est pour le flux de contrôle. pour afficher une certaine chose, vous devez utiliser <% = user%>. le signe égal après le signe du pourcentage est nécessaire.


@WaleedShafiq - Cela s'échappe pour HTML. Il n'est pas généré en HTML.