bo-tech

heart and tech with love.

expressjsのres, next, errの挙動を確認してみた

今さら感のある実験(ExpressJS)

res, next, errの動きってどうなるの?

疑問があったのでendpointを一つ作って試し打ち。

router.get('/test/abc', function(req, res, next) {
   console.log('a');
   next();
 }, function(req, res, next) {
   console.log('b');
   res.status(200).json({ms:'ms1'});
   setTimeout(next, 10000);
 }, function(req, res, next) {
   console.log('c');
   res.status(200).json({ms:'ms3'});
   next(new Error('hogehoge'));
 }, function(req, res, next) {
   console.log('d');
 }, function(err, req, res, next) {
   console.log('e');
   console.log(err);
   res.status(400).json(err);
 });

これをベースにして入れ替えたり書き換えたりして実験。

ポイントは

  • resした後のfunctionは実行されるのか
  • nextの引数に何か渡した場合は直後のやつは呼ばれるのか
  • timeoutで設定しても大丈夫か
  • 二回resするとどうなるのか

ちなみに上記結果は

a
b
c
e
[Error: hogehoge]
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: write after end
    at ServerResponse.OutgoingMessage.write (_http_outgoing.js:413:15)
    at ServerResponse.res.write (/home/vagrant/webapp/node_modules/compression/index.js:94:17)
    at ServerResponse.res.end (/home/vagrant/webapp/node_modules/compression/index.js:111:14)
...

このようになる。

ということで先ほどのポイントそれぞれに対しては以下のように整理した。

  • resした後のfunctionは実行されるのか

    res.jsonやres.sendしてもその後の関数は実行される。 (cが表示されているので)

  • nextの引数に何か渡した場合は直後のやつは呼ばれるのか

    nextに引数を渡してcallすると直後のerrorハンドリングができる関数へ遷移する。

    この部分はdocsでも記載されているから予想通り。

  • timeoutで設定しても大丈夫か

    特に問題なくresponseを返してから処理を行っているのが確認できた。

  • 二回resするとどうなるのか

    二回responseに対してwriteを行うとexceptionが発生する。

    これも大概予想通り。たまにasyncを実装していて間違った実装すると出てくる。

とこんな感じにまとまった。 一応備忘録的に。

Azure Webappsにてnode_modulesがインストールされないエラー

Azure WebappsとBitbucketとデプロイ

今 Azure Webappsを利用してwebサービスの開発中。

BitBucketでソース管理していて、

デプロイをpushしたら自動で反映するようにしていた。

スロットの追加

ちょっと試験的にスロットの追加をやろうと思い、

0から構築。

同様にリポジトリから同期して作成したら何か動かん。。。

なぜ?

Wed Jul 22 2015 08:12:26 GMT+0000 (Coordinated Universal Time): Unaught exception: Error: Cannot find module 'is-property'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (D:\home\site\wwwroot\node_modules\azure-storage\node_modules\request\node_modules\har-validator\node_modules\is-my-json-valid\node_modules\generate-object-property\index.js:1:80)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)

というのが出ていたので、モジュールが足りないのかと思って追っていったら確かになかった。

というか入れ子になっているモジュールの最下段へのpackage.jsonが存在しなかった。

理由は不明。

とりあえず現場対応

モジュール全部削除して

azureポータルからコンソールを開き

node install

これで終了。

んー、deployment.cmdとか読んでみたけど問題はなさそうなんだけどなー。

azure table storage 困り事 [AuthenticationFailed]

AuthenticationFailedのエラー

再起業して、現在新しい製品の1stリリースを目指して開発中。

構成は

angular-fullstack

azure table storage

sendgrid

twilio

webpay??

こんな感じか。

virtual boxの仮想環境内で実装しているのだが、 下記のようなエラーが出始めてazure storage tableに繋がらなくなる。。。

が解決したので投稿。

{ [Error]
  'm:error':
   { 'm:code': 'AuthenticationFailed',
     'm:message': 'Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:7b84b4f6-0002-0005-1ec1-bf606b000000\nTime:2015-07-16T12:16:49.7058777Z' },
  statusCode: 403,
  requestId: '7b84b4f6-0002-0005-1ec1-bf606b000000' }

エラーメッセージ見てるとよく分からんのだが、 原因は仮想環境内の時計がずれているからのようだ。

sudo /etc/init.d/ntp stop
sudo ntpdate -b ntp.jst.mfeed.ad.jp
sudo /etc/init.d/ntp start

これで直る。

cocos2d-xとiphone

他社さんに遊びに来たのでcocos2d-xと戯れる

iphoneで実機デバッグができるようにする。

最近購入したのでw

いかん、全然わからん。

GClue blog: Xcodeで実機デバッグをするまでの手順(スクリーンショット付き)

この辺りを参考にしてどうにか完成。

全体的に流れがよくわかっていないが、

  1. キーチェーンアクセスで証明書の要求を行う

    まず、鍵作って、それを埋め込んだCSR(要求書)を作成する。

  2. Certificates,Identifiers & Profilesで証明書とかProfileを作る

    apple developerセンターで上記CSRを送って証明書を取得する。

    なんのための証明書なのかってのを選ぶ必要があるので開発、配布用それぞれ作成。

    その後に自分のアプリIDを登録する必要がある。 特定のものに限定したIDを発行することもできるけど、ワイルドカード(なんでもいける)やつを作成した。

    端末もDeviceから登録。 UDIDはxcodeの[window]->[Device]から確認できた。

    この後にprovisioning fileの作成を行う。

    作ったあとに別にDLせんでも良いらしい。必要なときに勝手に落としてくるんかな。

  3. キーチェーンアクセスに証明書を登録する

    2.の最初の方で作った証明書をダウンロードして、実行するとローカルに登録される。

  4. Xcodeを使って実機にアプリケーションを転送する 私の場合はなぜかオーガナイザーを起動しても何も確認できなかったが、provisioning profileが既に登録されていてちょっと分からなかった。

    なんか[window]->[devices]に移行されていた模様

  5. キーチェーンアクセスで証明書をバックアップする

できたから開発しよう

あとは馬車馬の如くなり

サンプルは動くけど。。。

editTextを入れてみようと思ったらいきなり動かなくなった。

いろいろ調べたら arm64 のライブラリが足りない模様。

だが探しても見つからない。。。

arm64はiphone6のプロセッサなのでこれで動いてくれないとせっかく実機デバッグできるようにしたのに無駄になる。。。

多分ライブラリが足りていない(64arm用にコンパイルされたものが)

のが原因だと思って必要そうなやつ片っ端からコンパイルかけてぶっこんだけど

webpの関連ライブラリのリンク付けができなくて失敗した。

editbox諦めようかな。

generator-angular-fullstackが成功しなかった話

流行りに乗ろうとした

ということでyeomenを入れて、angular-fullstackフレームを使おうと思ったのだけど、

途中でエラーが発生して失敗した。

というか一瞬成功しているように見えたが、

grunt serve

を実行したらダメだった。

エラー内容は

Warning: Error: File to import not found or unreadable: bootstrap-sass-official/vendor/assets/stylesheets/bootstrap.

bower-componentへのパスが間違っているか、読み込めないから

との内容。

探したら多分

bower init

が失敗していたみたい。

やり直し

bower initをやると

Failed to execute "git ls-remote --tags --heads git://github.com/es-shims/es5-shim.git", exit code of #128 fatal: Not a git repository: ../.git/modules/webapp

こんなメッセージ。

なんのこっちゃと思ったら自分のフォルダ構成がまずかったっぽい。

まだ作り始めのプロダクトで構成が

dev(git) + webapp(git-submodule)

という環境なのだが、webappだけsyncフォルダにしてvm上で開発しようとしていたらwebappがsubmoduleなもんだから途中でgitがdevフォルダからwebappのgit関係の情報を読み込もうとしてたみたい。

でもdevフォルダはsyncしていないからgit repositoryじゃないよっていうエラーで死んでた。。。

webappを通常のgit repositoryとして修正した。

良いメッセージ vol.1

ほりえもん近畿大学

https://www.youtube.com/watch?v=2DTyHAHaNMw

www.youtube.com

よい話かと思う。

同じところでずっと働こうとするのは悪いことだとは思わないし、大きな会社も立派だと思う。

とはいえ、一度起業をして失敗して、もう一回やり直そうとしている自分としては非常に良いメッセージでした。

ある会社のCTOを辞めた話

CTO辞めました

いろいろあって先月末をもってCTOを辞めました。創業者の一人だったのに。 巷でよく聞く話ですし、特に最近は自分の周りでもたくさんいた。

会社をやる上で最も大切にしなくてはならないことはなんだろうか。

社長はお客さんしか見てなかったな。 いや、それも正しく見ていたのかは定かではない。

私は、自分、家族、従業員、従業員家族、お客さんの順番で大切にしなくてはならんだろうと思っている。

一人でモノゴトを成し遂げるのはほぼ不可能で、他の人の力を借りなくてはならず、蔑ろにしたらしっぺ返しを食らうに決まっているのだ。

だから付き合えないものは付き合えないと正直に言うし、要らないものは要らないと伝えるし、無理なものは無理だと言うし、それでも相手が何を言わんとしているのかに関しては一生懸命に聞こうとする。

やっぱり人間裏表があっては良くないな、どっかから伝え漏れる話だし。

最終的には「僕悪くないのー、みんな優しくないー、社長だから一人でやるもん、リストラやー」

は??

って感じで終わりました。

まぁ一人で頑張ってくださいな。従業員、役員全員辞めたけど。

砂上の楼閣の上に立つ裸の王様よ。