2011-10-04 5 views
1

Je voudrais passer l'objet JSON avec la vue lorsque je montre un objet Model dans Node/Express en utilisant Mongo.Node.js/Express/Mongoose - Comment envoyer JSON avec vue de l'objet?

itinéraire Curren (en passant juste la vue):

app.get('/page/:customurl', function(req, res, next) { 
    Page.findOne({ customurl: req.params.customurl.toLowerCase()}, function(error, page) { 
    if (!page) return next(new NotFound('Document not found')); 
    res.render('pages/page_show.ejs', 
     { locals: { 
      title: 'ClrTouch | ' + page.title, 
      page:page, 
     } 
    }); 
    }); 
}); 

Puis-je ajouter pagejson:page.toObject() à la population locale, puis mettre pagejson sur ma page quelque part? Quand j'ai essayé cela, il est apparu comme [objet, objet] dans le navigateur. Y a-t-il un moyen facile de passer le JSON à la vue?

Merci!

Répondre

6

Vous devriez regarder JSON methods

dans le nœud rempl: (. Ex demandé via ajax)

> var document = {a: 'first property', b: 'second property'}; 
> JSON.stringify(document) 
'{"a":"first property","b":"second property"}' 
> 

Si vous devez répondre à la route de différentes façons, vous pouvez passer un nouveau paramètre à l'url app.get('/page/:customurl.:format', ... ou contrôle les en-têtes de requête stockés dans req.headers

if (req.headers["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest") { 
    res.send(document); 
} else { 
    res.render(...); 
} 
+0

cool. bien ce que je veux faire, et je ne sais pas totalement si cela a du sens est de répondre à la requête html simple get avec l'objet disponible en JSON. un peu comme envoyer la vue et ensuite avoir le navigateur appeler .getJSON() et renvoyer json. Je souhaite que tous les attributs de la page soient disponibles dans JSON sans avoir à l'appeler depuis le navigateur. – tuddy

+1

@tuddy Vous pouvez toujours définir un objet 'dans vos modèles, afin que vous puissiez récupérer l'objet via' JSON.parse ($ ("# document_object"). Html()); '. – LoG

+0

ohhh. c'est fantastique! Oui – tuddy