カテゴリー : Node.js

[Node.js] 逆引きメモ

Node.js で「あれしたい」というときに振り返る逆引きメモ。

JavaScriptだけに限ったことは、別にまとめてます。

[JavaScript] 逆引きメモ | CodeNote.net


ファイル File

ファイルが存在するかを調べる。

var path = require("path");
path.existsSync("/tmp/upload/some_file.txt");

エラー処理

Node and Test – badatmath/jsdojo

[Jade] each で要素だけでなく index も取得する

テンプレートエンジン Jade の each で現在のループ回数 index を取得する方法をメモ。

each item, index in list
  li= item
  if index === 1
    | : First item in list!

参考情報

node.js – Jade template engine – Each Iteration Offset – Stack Overflow

[Mongoose] 異なるOR条件を2つ以上指定したい場合の書き方

Node.js + Mongoose にて異なるOR条件を2つ以上指定したい場合の書き方をご紹介します。

mongoose

続きを読む

[Mac] Node.js インストール中にエラー Build failed: -> task failed (err #2): {task: uv uv.h -> uv.a}

Xcode で Command Line Tools をインストールして、かつ、osx-gcc-installerをインストールしたら、Node.js がインストールできなくなりました…

% nvm install v0.6.19 
Additional options while compiling: 
######################################################################## 100.0%
Checking for program g++ or c++          : /usr/bin/g++ 
Checking for program cpp                 : /usr/bin/cpp 
Checking for program ar                  : /usr/bin/ar 
Checking for program ranlib              : /usr/bin/ranlib 
Checking for g++                         : ok  
Checking for program gcc or cc           : /usr/bin/gcc 
Checking for gcc                         : ok  
Checking for library dl                  : yes 
Checking for openssl                     : yes 
Checking for library util                : yes 
Checking for library rt                  : not found 
Checking for fdatasync(2) with c++       : no 
'configure' finished successfully (0.250s)
Waf: Entering directory `/Users/bakorer/.nvm/src/node-v0.6.19/out'
DEST_OS: darwin
DEST_CPU: x64
Parallel Jobs: 1
Product type: program
[ 1/35] copy: src/node_config.h.in -> out/Release/src/node_config.h
[ 2/35] cc: deps/http_parser/http_parser.c -> out/Release/deps/http_parser/http_parser_3.o
/usr/bin/gcc -rdynamic -pthread -m64 -arch x86_64 -g -O3 -DHAVE_OPENSSL=1 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_DARWIN_USE_64_BIT_INODE=1 -DHAVE_FDATASYNC=0 -DARCH="x64" -DPLATFORM="darwin" -D__POSIX__=1 -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -IRelease/deps/http_parser -I../deps/http_parser ../deps/http_parser/http_parser.c -c -o Release/deps/http_parser/http_parser_3.o
[ 3/35] src/node_natives.h: src/node.js lib/dgram.js lib/console.js lib/buffer.js lib/querystring.js lib/punycode.js lib/http.js lib/net.js lib/stream.js lib/events.js lib/util.js lib/module.js lib/_debugger.js lib/assert.js lib/fs.js lib/child_process.js lib/os.js lib/readline.js lib/vm.js lib/url.js lib/tls.js lib/crypto.js lib/sys.js lib/https.js lib/freelist.js lib/dns.js lib/_linklist.js lib/buffer_ieee754.js lib/tty.js lib/cluster.js lib/repl.js lib/path.js lib/string_decoder.js lib/timers.js lib/zlib.js lib/constants.js -> out/Release/src/node_natives.h
[ 4/35] uv: deps/uv/include/uv.h -> out/Release/deps/uv/uv.a
rm -f src/ares/*.o
rm -f src/unix/ev/*.o
rm -f src/unix/eio/*.o
rm -f src/unix/*.o
rm -rf test/run-tests.dSYM run-benchmarks.dSYM
rm -f -f src/*.o *.a test/run-tests test/run-benchmarks
 
...
 
make[1]: *** [src/unix/darwin.o] Error 1
Waf: Leaving directory `/Users/bakorer/.nvm/src/node-v0.6.19/out'
Build failed:  -> task failed (err #2): 
	{task: uv uv.h -> uv.a}
make: *** [program] Error 1
nvm: install v0.6.19 failed!

そもそも、Xcode の Command Line Tools 使うんだったら、osx-gcc-installer はインストールしてはいけなかったみたいです。

下記のコマンドで、一旦アンインストールして、もう一度 Command Line Tools をインストールすると、Node.js を正常にインストールすることができました。

% sudo /Library/Developer/Shared/uninstall-devtools --mode=all

GNU GCC 4.2 が必要ならこれだけ、Homebrew でインストールした方が良さそうですね。

brew install apple-gcc42

以上です。

[参考]

xcode を入れて、消して、node がビルドできた話 – すぱぶろ

[Node.js] コマンドライン引数をカンタンに扱えるモジュール「commander.js」

Node.js で、コマンドライン引数をカンタンに扱えるモジュール「commander.js」がとても便利です!

visionmedia/commander.js · GitHub

[Node.js] http.request で [Error: socket hang up] code: ‘ECONNRESET’

Node.js で HTTPS リクエストを生成するコードで [Error: socket hang up] code: ‘ECONNRESET’ というエラーが発生しました。

エラーメッセージ

Error: socket hang up
    at createHangUpError (http.js:1124:15)
    at Socket.socketOnEnd [as onend] (http.js:1272:23)
    at TCP.onread (net.js:389:26)

HTTPS リクエストを送るのに、https モジュールじゃなく http モジュールを使っていたのが原因でした…

なので、下記のようにちゃんと https モジュールを使えばOKです。

var https = require('https');
 
/**
 * HTTPS POST (JSON)
 *
 * @param {Object} jsonData
 * @param {Function} callback
 * @param {String} encoding
 */
function httpJsonPost(jsonData, callback, encoding) {
  jsonData = jsonData || {};
  encoding = encoding || 'utf8';
 
  var jsonDataString = JSON.stringify(jsonData);
 
  var headers = {
    'Content-Type': 'application/json',
    'Content-Length': jsonDataString.length
  };
 
  var options = {
    host: 'api.example.com',
    port: 443,
    path: '/1/push',
    method: 'POST',
    headers : headers
  };
 
  var req = https.request(options, function(res) {
    res.setEncoding(encoding);
 
    var responseString = '';
 
    res.on('data', function(chunk) {
      responseString += chunk;
    });
 
    res.on('end', function() {
      var resultObject = JSON.parse(responseString);
      return callback(null, resultObject, res.statusCode, JSON.stringify(res.headers));
    });
  });
 
  req.on('error', function(e) {
    return callback(e);
  });
 
  req.write(jsonDataString);
  req.end();
}

[参考情報]

HTTPS Node.js v0.11.2 Manual & Documentation

[Mongoose] Schema.Types.Mixed だと save 前に .markModified が必要

Node.js + Mongoose でインスタンスを save で保存できないときの原因のひとつに Schema.Types.Mixed があります。

プロパティの型が Schema.Types.Mixed とかだと、値に変更があったことを Mongoose が自動検知してくれないみたいです。

mongoose

続きを読む

[Node.js] バージョン管理ツール nvm を Mac にインストールする方法

Node.js のバージョン管理ツール「nvm」を Mac にインストールする方法をメモ。
(最終更新日:2014/11/19)

creationix/nvm · GitHub

nvm のインストール

git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
source ~/.nvm/nvm.sh

nvm install で Node.js をインストールする前に、必要なライブラリをインストール

[Mac] OpenSSL を Homebrew でインストールする方法

pkg-config をインストールしないと Node.js インストール時に、Checking for openssl : no と表示されてしまう。

brew install pkg-config

Node.js をインストールする

nvm install v0.11.3

以上です。

[Node.js] node-validator でサニタイズ、バリデート

Node.js でサニタイズやバリデートするには node-validator というパッケージが便利!

chriso/node-validator · GitHub はてなブックマーク - chriso/node-validator · GitHub

コードで一言: node-validatorを使ってみた はてなブックマーク - コードで一言: node-validatorを使ってみた

コードで一言: node-validatorを使ってみた はてなブックマーク - コードで一言: node-validatorを使ってみた

[Node.js] Error: Cannot find module ‘express’

Node.js で Express をインストール済みなのに Error: Cannot find module ‘express’ というエラーが出るときの解決方法をメモ。

■ エラーメッセージ

% node-dev app.js
 [ERROR] Error
Error: Cannot find module 'express'
    at Function._resolveFilename (module.js:337:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:359:17)
    at require (module.js:375:17)
    at Object.<anonymous> (/Users/bakorer/git/sampleapp/app.js:5:15)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Object..js (/Users/bakorer/.nvm/v0.6.21/lib/node_modules/node-dev/wrapper.js:121:14)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)

■ 解決方法

依存関係のあるものを含めてインストールしないといけなかった。

% npm install -d

以上です。

【参考】node.js + express インストールめも – しゅろのめも はてなブックマーク - node.js + express インストールめも - しゅろのめも