Node-express / EJS ViewでJSON出力

Written by shoota

JSONを返すAPIをサーバからたたいて結果をまるっとEJSに埋め込みたかった。地味にはまったのでメモ。

router

app.get('/hoge', function(req, res){
  //データとってくるとかAPI叩くとかしてJSONができる
  var json= foo.getJSON();
  res.render('hoge.ejs', {data:json});
});

ejs

<!-- HTML escapeされてしまってだめだった -->
 <%= JSON.stringify(data) %>

<!-- %=じゃなくて%-を使うといい -->
 <%- JSON.stringify(data) %>

EJSに渡しているjsonはJSONオブジェクトなので、EJS側で stringify して文字列にする。(別にRouter側でやってもいいが) <%= str %> だと中の文字列に対してオートでHTMLエスケープされちゃうので、&quoat;がいっぱいでてくる。 <%- str %> で書いてあげればOK