タグ : Node.js

[Node.js] module.exports と exports の違い

結論だけ書いておくと、よく分からないなら module.exports を使いましょう。

Node.js の公式ドキュメント にもそう書いてあります。

ガイドラインとして、もし exports と module.exports の間の関係が魔法のように 見えるなら、exports を無視して module.exports だけを使うようにしてください。

module.exports と exports の違いについて詳しく知りたいって方は下記の記事を読むといいんじゃないでしょうか。

今、ドットインストールの「Express入門」を Mac で学習するための覚え書き

今、ドットインストールの「Express入門」を Mac で学習するための覚え書きです。

「Express入門」を学ぶ前提

ドットインストールの「Express入門」は Express3 の前提でレッスンが用意されています。しかし、現在は Express4 がリリースされているので、何も考えずに進めていくと Express4 がインストールされてしまい思うようにレッスンを進めていくことができません。

このようなつまづきポイントがいくつかあるので、本記事ではそれらを補足していきます。

#01 Expressとはなにか?

まず、Node.js のバージョン管理ツール nvm を Mac にインストールする方法 を参考にしてインストールして、Node.js もインストールします。

そして、レッスン内では、

sudo npm install express -g

と書かれていますが、これを下記のように Express3 のバージョンを指定してインストールしましょう。

npm install express@3.21.2 -g

#03 はじめてのExpress

レッスン内では、

npm install express

と書かれていますが、これも下記のように Express3 のバージョンを指定してインストールしましょう。

npm install express@3.21.2

また、ブラウザからアクセスするには 192.168.33.93:3000 を入力するとなっていますが、Mac のターミナルで node app している場合 localhost:3000 もしくは 127.0.0.1:3000 を入力することで、アクセスできます。

#07 middlewareを作ってみよう

このレッスンでも、

sudo npm install nodemon -g

と sudo 使わずに、

npm install nodemon -g

で大丈夫です。

以上です。Mac で「Express入門」を学習する方のお役に立てたなら嬉しいです。

[Node.js] Mongoose の virtual attributes を sinon で stub 化する

Mongoose の virtual attributes を sinon で stub 化する方法をご紹介します。

mongoose

続きを読む

[Node.js] MONGOOSE WARNING がでないように stable version を使おう

Node.js + Mongoose のアプリ開発で MONGOOSE WARNING という警告メッセージが表示されたら、 unstable バージョンを利用していると思われるので stable なバージョンを使いましょう。

mongoose

続きを読む

[Node.js] phantom モジュールの addCookie メソッドの引数が変更された

Node.js 向けの PhantomJS wrapper である phantom の addCookie メソッドの引数がバージョン 0.7.1 から 0.7.2 で変更になりました。

そのため addCookie メソッドを使ってる箇所がエラーで動かなくなってしまいました。

phantom stdout: TypeError: incompatible type of argument(s) in call to addCookie(); candidates were
    addCookie(QVariantMap)
 
 
phantom stdout:   /u/apps/myapp/shared/node_modules/phantom/shim.js:5621
  /u/apps/com/shared/node_modules/phantom/shim.js:4526
  /u/apps/com/shared/node_modules/phantom/shim.js:4502
  /u/apps/com/shared/node_modules/phantom/shim.js:4382
  /u/apps/com/shared/node_modules/phantom/shim.js:4370

変更点は、

addCookie: (name, value, domain, cb=->) ->

から

addCookie: (cookie, cb=->) ->

に arguments が変更されているだけです。

なので name, value, domain と個別に引数に渡されていたのを cookie オブジェクトにまとめて渡すように、addCookie メソッドを呼び出しているコードを修正すれば OK です。

詳しくは上記の issue と pull request を読むと分かりますが PhantomJS の API に合わせる方針で修正されたようです。

東京Node学園 15時限目 メモ #tng15

東京Node学園 15時限目に参加したので個人的なメモ

「io.jsについて」 by @yosuke_furukawa

io.js – JavaScript I/O

io.js-v1.0.0のリリースによせて – ぼちぼち日記

「extensible web」 by @Jxck_

Extensible web from Jxck 🙂

The Extensible Web Manifesto

Extensible Web の夜明けと開発者が得た可能性の話 – Block Rockin’ Codes

「ws の permessage deflateを実装した話とそれによりsocket.ioがどう変わるか」 by @nkzawa

draft-ietf-hybi-permessage-compression-19 – Compression Extensions for WebSocket

「CodeOnMobile」 by @dai_shi

dai-shi/codeonmobile

「今できる通信高速化にトライしてみた」 by @shibu_jp

東京Node学園 今できる通信高速化にトライしてみた from Yoshiki Shibukawa

DeNA さん、会場提供ありがとうございました!

懇親会まで含めて、めっちゃ楽しかったです!!

[Node.js] console.log や console.error などの出力の先頭に時刻を付ける log-timestamp

Node.js で console.log や console.error などの出力の先頭に時刻を付ける log-timestamp というモジュールをご紹介します。

動作例

> console.log('Before log-timestamp');
Before log-timestamp
 
> require('log-timestamp');
 
> console.log('After log-timestamp');
[2015-02-03T13:45:13.198Z] After log-timestamp
 
> console.error('Error')
[2015-02-03T14:15:18.093Z] Error

log-timestamp を使うことでエラーの発生時刻 error.log に出力できるので、エラーやバグなどの調査に役立てることができそうです。


参考情報

bahamas10/node-log-timestamp

bahamas10/node-log-prefix

[Node.js] Error: bind EADDRINUSE

Node.js (Express) で forever restart 後に bind EADDRINUSE エラーが頻発する障害が発生しました。

Error: bind EADDRINUSE はそのポートが既に使われてる場合に発生するエラーでして、同じ障害に悩まされた人のために解決方法をメモしておきます。

エラーメッセージ

Error: bind EADDRINUSE
    at errnoException (net.js:904:11)
    at net.js:1084:30
    at Object.12:1 (cluster.js:592:5)
    at handleResponse (cluster.js:171:41)
    at respond (cluster.js:192:5)
    at handleMessage (cluster.js:202:5)
    at process.EventEmitter.emit (events.js:117:20)
    at handleMessage (child_process.js:318:10)
    at child_process.js:392:7
    at process.handleConversion.net.Native.got (child_process.js:91:7)
    at process.<anonymous> (child_process.js:391:13)
    at process.EventEmitter.emit (events.js:117:20)
    at handleMessage (child_process.js:318:10)
    at Pipe.channel.onread (child_process.js:343:11)

まず netstat コマンドで node.js サーバーのプロセスで使うポートが他のプロセスに使われていないか確認します。

$ netstat -nltp | grep 3000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      6653/phantomjs

今回は phantom.js が 3000 番ポートで起動していたようでした。phantom.js は利用しているものの他のポート番号を指定して起動させるようにしていたので 3000 番ポートを使っていた理由は不明です。プロセスを停止させて問題ない場合、 ps aux | grep phantomjs で phantom.js の PID (プロセス番号) を特定して kill コマンドでプロセスを終了させます。

最後に forever や pm2 もしくは node コマンドなどで node サーバーを起動させて、エラーログに Error: bind EADDRINUSE が出力されていないことを確認すれば完了です。


参考情報

Node.jsの開発で `warn – error raised: Error: listen EADDRINUSE` って怒られるときの対応 – Qiita

node.js – Nodejs application Error: bind EADDRINUSE when use pm2 deploy – Stack Overflow

Linux ソケット・プログラミングの 5 つの落とし穴

[Mongoose] stream を使ってバッチ処理するときは noCursorTimeout: true オプションを設定すると幸せになれるかも

Express.js(Node.js) + Mongoose(MongoDB) という構成で、バッチ処理を長時間実行すると途中で終了してしまう問題が発生しました。

mongoose

続きを読む

2014年9月3日のトピックス

2014年9月3日の個人的なトピックスを振り返り。


プログラミング

Node.js の process.nextTick() やイベントループについての理解が浅い。

そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する

Nodeコアの歩き方 ~Nodeの開発に参加しよう~ [Node.js] // Speaker Deck

GitHub でリリースノートや CHANGELOG を自動生成したい。

Git tagとGitHub ReleasesとCHANGELOG.mdの自動化について | Web Scratch

lalitkapoor/github-changes


デザイン

大規模サイトの CSS 設計はどうあるべきか?

不特定多数の人が更新する大規模サイトに必要な CSS 設計の思想


グロースハック

コンバージョン率最適化を左右する3種の心理 | SEO Japan


ビジネス

スタートアップは「失敗」を積極的にするもの – パパパパ