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?
3 Réponses :
<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.
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>
<% =
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 '
.
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.
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.
remplacer
<% var user = <% user%>%>
parvar user = <% user%>
@PHPNinja - Cela corrigera l'erreur, mais ne fonctionnera toujours pas.