servify.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. module.exports = (function(libs){
  2. var express, req;
  3. if (!process.browser) {
  4. var express = libs["express"];
  5. var cors = libs["cors"];
  6. var rq = libs["request"];
  7. var bodyParser = libs["body-parser"];
  8. } else {
  9. var rq = libs["xhr"];
  10. };
  11. function api(port, api){
  12. return new Promise(function(resolve, reject){
  13. var app = express();
  14. app.use(bodyParser.json());
  15. app.use(cors());
  16. app.use(function (error, req, res, next){
  17. if (error.message === "invalid json")
  18. res.send("null");
  19. else next();
  20. });
  21. function callFunc(req, res){
  22. try {
  23. var url = req.url;
  24. var parens = url.indexOf("(");
  25. if (parens !== -1){
  26. var name = url.slice(1, parens);
  27. var args = JSON.parse("["+decodeURIComponent(url.slice(parens+1, -1))+"]");
  28. } else {
  29. var name = url.slice(1);
  30. var args = [req.body];
  31. }
  32. var result = api[name].apply(null, args);
  33. if (result.then)
  34. result.then(result => res.json(result));
  35. else
  36. res.json(result);
  37. } catch(e) {
  38. res.send("null");
  39. };
  40. };
  41. app.get("*", callFunc);
  42. app.post("*", callFunc);
  43. app.listen(port, resolve).on("error", reject);
  44. });
  45. };
  46. function at(url){
  47. return new Proxy({}, {
  48. get: function(target, func){
  49. return function(){
  50. var args = [].slice.call(arguments);
  51. return new Promise(function(resolve, reject){
  52. rq.post({uri: url+"/"+func+"("+JSON.stringify(args).slice(1,-1)+")"}, function(err, res, body){
  53. if (err) reject(err);
  54. else resolve(JSON.parse(body));
  55. });
  56. });
  57. };
  58. }
  59. });
  60. };
  61. return {
  62. api: api,
  63. at: at
  64. };
  65. });