uoz 作業日記

様々な作業の記録を共有するブログです。

Google app engine上のRingoJSからdatastoreにつなげる

こいつの派生
http://uozias.hatenablog.com/entry/2014/03/29/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89javascript_RingoJS%E3%81%A7google_app_engine%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82


http://kjunichi.cocolog-nifty.com/misc/2012/02/jsdoitgoogle-ap.html
このページを見ると、実はできる?
ringoJSは、javaのクラスに割と自由にアクセスできるのか。


これも参考になる
http://stackoverflow.com/questions/8464618/reading-and-writing-data-using-ringojs-on-app-engine


JAVAで普通にdatastoreを使う方法
https://developers.google.com/appengine/docs/java/datastore/entities?hl=ja


知らなかったが、ringoJSではjavaのクラスを割と自由に使えるんだな。
そこで、gae javaでdatastoreを使う方法をそのまま移植して、以下のようなコードでいけた。

action.js

var response = require('ringo/jsgi/response');
var mustache = require('ringo/mustache');

exports.index = function (req) {
    var template = getResource("./templates/index.html").content;
    
    //javaのdatastoreいじるためのクラス
    importPackage(com.google.appengine.api.datastore);

    var datastore = DatastoreServiceFactory.getDatastoreService();
    //var datastore = com.google.appengine.api.datastore.DatastoreServiceFactory.getDatastoreService();
    
    //保存
    var testPost = new com.google.appengine.api.datastore.Entity("TestPost","post2");
    testPost.setProperty("content", "testdayo!!!!!");
    datastore.put(testPost);
    
    var key = KeyFactory.createKey("TestPost", "post2");

    // Getting the entity
    var blogPost = datastore.get(key);

    // Reading the properties
    var content = blogPost.getProperty("content");


    
    return response.html(
        mustache.to_html(template, {
            title: "RingoJS test page",
            content: content
        })
    );
};



また、html側では、このcontentを表示している。

<!DOCTYPE html>
<html]]>
<head]]>
<title]]>Welcome to Ringo</title]]>
<link rel="stylesheet" href="stylesheets/page.css" />
<link rel="stylesheet" href="stylesheets/index.css" />

</head]]>
<body]]>

<div id="header"><h1]]>{{title}}</h1></div]]>
<div id="body"]]>
{{content}}

</div]]>
<script type="text/javascript" src="javascripts/index.js"></script]]>
</body]]>
</html]]>

実践JS サーバサイド JavaScript 入門

実践JS サーバサイド JavaScript 入門

作ればわかる!Google App Engine for Javaプログラミング

作ればわかる!Google App Engine for Javaプログラミング