Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

もっと簡単にnode.jsを使いたい ~関数ホスト~

More than 3 years have passed since last update.

有給消化中、漫然と起きたり寝たり。
このままでは腐りそうだと、リハビリがてらあまり触れていなかったnode.jsをがっつり触っています。

で。

もっと簡単にnode.jsを使いたい。

これ。

特に、ちょっとしたAPIサーバを立てるのに、expressが~、とかmongoが~と、いろいろ定型文を書いていくのも面倒だし、相乗りさせる時にポートが、とかnginxのリバースプロキシが、とかそういうのを考えるのが超面倒です。
マイクロサービスのフレームワークなんてのも考えると面倒だし。

PHPの頃は、phpファイルを書いて、適当に載せれば何とでもなったのに。
デプロイは乗っけるだけで終わり。

「じゃあPHPで書けばいいじゃん」みたいな発想で、前職では結構本当にPHPで解消していたのですが、これを機にそういう感じの関数 as JSON APIサーバを作ってみました。

使ったもの

  • node.js
  • express
  • json-web-token
  • nedb

出来上がったもの

https://github.com/zrelyydereva/node-function-server

適当な説明

 userland以下の、functionsと、staticの下に、配信したものを置くと、そのまま公開してくれる便利な子。
 関数を書き換えると、勝手にリロードしてくれる賢い子。

ちょっと細かい話

  • リクエストされたURLの、一つ目と同名のjsファイルがfunctionsの下にあれば、解釈して、二つ目の関数を実行します。
  • アンスコ一つで始まるfunctionは、トークンがないと実行できないです。
  • アンスコ二つで始まるfunctionは、外から実行できないです。
  • クエリ文字列、POSTされたbodyを、そのまま列挙したものが関数の引数になります。
  • 最終引数にはユーザ情報も入っています。
  • どのjsにも、authenticate関数があり、userid、パスワードを渡すと(それが有効ならば)JWTを返却します

 jsファイルがない場合、以下の順序で静的ファイルが返却されます。
- static/group_xxx/リクエストパス(トークンがある場合、かつグループのフォルダがある場合)
- static/authed/リクエストパス(トークンがある場合、かつグループのフォルダがない場合)
- static/public/リクエストパス(トークンがない場合)

 こんな感じで、おおざっぱに作ってみました。
 作りかけで、結局実装しないものも入ってはいますが、備忘録がてら、一旦書き終えようかと。
 次回はもう少しこまごま書いていこうと思います。

zrelyydereva
広告代理店でWEB系・iAppli・Flash→医療系(オーダ・電カル~医事会計、介護報酬会計)→社内SE。 C#なんかもしますが、PHP,node.jsなどLL系が性に合ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away