web-dev-qa-db-fra.com

Passer un objet au client dans node/express + ejs?

J'ai un assez gros objet que je dois passer à une fonction dans un script client. J'ai essayé d'utiliser JSON.stringify, mais j'ai rencontré quelques problèmes avec cette approche, principalement liés aux performances. Est-il possible de faire quelque chose comme ça dans ejs?

app.get('/load', function(req, res) {
    var data = {
        layout:'interview/load',
        locals: {
            interview: '',
            data: someLargeObj
        }
    };
    res.render('load', data);
});

Et dans mon script client, je passerais cet objet à une fonction comme

<script type="text/javascript">
    load(<%- data %>); // load is a function in a client script
</script>

Quand j'essaie, je reçois soit

<script type="text/javascript">
    load();
</script>

ou

<script type="text/javascript">
    load([Object object]);
</script>
22
Errol Fitzgerald

C'est le comportement attendu. Votre moteur de gabarit tente de créer une chaîne à partir de votre objet qui mène à [Objet objet]. Si vous voulez vraiment transmettre des données comme ça, je pense que vous avez bien agi en enchaînant l'objet.

10
Pickels

Si vous utilisez des modèles, il serait beaucoup mieux d’obtenir les valeurs dans le modèle, par exemple si l’utilisateur est connecté ou non. Vous pouvez obtenir les données locales d'envoi en utilisant 

<script>
    window.user = <%- JSON.stringify(user || null) %>
</script>

À partir du code côté serveur, vous envoyez des données utilisateur.

res.render('profile', {
    user: user.loggedin,
    title: "Title of page"
});
1
Piyush P

Ce que vous avez est un résultat comme celui-ci [{'re': 'tg'}]

Vous devez réellement le faire en boucle. Voir javascript while loop https://www.w3schools.com/js/js_loop_while.asp

Ensuite, rendez-le dans votre front-end avec ejs ... Je ne peux pas vous aider, j'utilise hbs

0
Mimigirl