non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

Jsdo.itでサーバサイドJavaScriptを実現

とりあえず、実現できた

おはようございます。息子に付けられて顔の傷がなかなか治らないkjunichiです。 念願のjsdoitでサーバサイドJavaScriptが実現しました。

Google App Engine側のソース

#!/usr/bin/env ringo

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

// Minimalistic request dispatcher in lieu of a proper framework
exports.app = function(request) {
    var path = request.pathInfo.slice(1) || "index";
    // 1. resolve against actions
    if (typeof actions[path] === "function") {
        return actions[path](request);
    }
    // 2. resolve against public folder
    var resource = getResource("./public/" + path);
    if (resource.exists()) {
        return response.static(resource);
    }
    importPackage( java.net);
	importPackage( java.io);
	var sourceJs = "http://jsdo.it/kjunichi/"+path+"/js";
	var url = new java.net.URL(sourceJs);
	try {
	var ucon = url.openConnection();
	var istream = ucon.getInputStream();
	var isr = new java.io.InputStreamReader(istream, "utf-8");
	var br = new java.io.BufferedReader(isr);

	var line = "";
	var buf = "";
	while ((line = br.readLine()) != null) {
		buf=buf+line+"\n";
	}
	// 読み込んだJavaScriptを実行する。
	var result="";
	// jsdo.it側でjsdoitServerFuncを定義する。
	eval(buf);
	result = jsdoitServerFunc(request);
	return result;
	} catch(e) {
		return response.notFound(e);
	}
    // 3. return 404 response
    return response.notFound(request.pathInfo);
}

// main script to start application
if (require.main == module) {
    require("ringo/httpserver").main(module.id);
}