express+ejsでオブジェクトを含む配列をクライアント側のjsに渡す方法に嵌ったのでメモ。
サーバー側のコードがこれ。普通にキーと値(配列)をejsテンプレートにセットにすればいい。
test
var roominfo = function(roomname){
this.roomname=roomname;
};
room_info_array= new Array(1);
room_info_array[0]=new roominfo("room");
app.get("/", function(req, res){
res.render('login',{room_info:room_info_array});
});
クライアント側がこう。
test
<script type="text/javascript">
var data = <%- JSON.stringify(room_info) %>
</script>
ポイントは<%- %>にすること。<%= %>ではない。後者だと渡した値を勝手にエスケープ処理してしまってオブジェクトとして認識してくれない。
この部分は解決したんだけど、まだ実現できていないことがある。
Socket.ioのconnection内で代入した値をテンプレートに渡せない。
test
io.sockets.on('connection', function(socket) {
//この中でroom_infoの値を操作して、新しく"/"にアクセスして来たクライアントにroom_infoの値を渡したいが、nullになる。
});
expressを使って渡そうとするのがそもそも間違いなのかな? 普通にクライアントに配列渡すメソッド定義すればやりたいことは実現できると思うけど・・・・