personium / personium-engine

Additional module for personium-core to enable server-side JavaScript execution.
Apache License 2.0
16 stars 7 forks source link

How about writing Engine Script Handler in module style. #150

Open yoh1496 opened 3 years ago

yoh1496 commented 3 years ago

I think it would be nice if I can write Engine Script Handler as module.

For example,

const { something } = require("./submodule");

exports.handler = function(request) {
  const result = something.do();
  return {
    status: 200,
    headers: {"Content-Type": "application/json"},
    body: [ JSON.stringify(result)],
  };
};

Current part of calling function is below.

https://github.com/personium/personium-engine/blob/develop/src/main/java/io/personium/engine/PersoniumEngineContext.java#L367

        Object fObj = scope.get("fn_jsgi", scope);
        Object result = null;
        if (!(fObj instanceof Function)) {
            log.warn("fn_jsgi not found");
            throw new PersoniumEngineException("Server Error", PersoniumEngineException.STATUSCODE_SERVER_ERROR);
        }

        Object[] functionArgs = {jsReq.getRequestObject() };

        previousPhaseTime = System.currentTimeMillis();

        Function f = (Function) fObj;
        result = f.call(cx, scope, scope, functionArgs);

I think this issue could be solved with modifing here with below steps.

  1. load module
  2. call function loadedmodule.handler
  3. return result

Merits

Demerits

How is this?