カテゴリー : Node.js

[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 が自動検知してくれないみたいです。

To “tell” Mongoose that the value of a Mixed type has changed, call
the .markModified(path) method of the document passing the path to the
Mixed type you just changed.

[引用元]:Mongoose SchemaTypes v3.5.6

markModified メソッドの使い方は下記のような感じです。

var schema = new Schema({
  mixed:   Schema.Types.Mixed
})
 
// example use
 
var Thing = mongoose.model('Thing', schema);
 
var m = new Thing;
m.mixed = {[ any: { thing: 'i want' } ]};
m.markModified('mixed');
m.save(callback);

[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 インストールめも - しゅろのめも

[Node.js] gyp ERR! configure error Error: EACCES, mkdir ‘/Users/name/.node-gyp’

================================================================================
=                                                                              =
=  Attempting to build bson c++ extension                                      =
=   Windows: no build will be attempted as binaries are prepackaged            =
=   Unix: on failure the package will still install without the C++ extension  =
=                                                                              =
================================================================================
node-gyp clean
node-gyp configure build
gyp WARN install got an error, rolling back install
gyp ERR! configure error Error: EACCES, mkdir '/Users/bakorer/.node-gyp'
gyp ERR! not ok 
make: *** [node_gyp] Error 1
child process exited with code 2
% mkdir /Users/bakorer/.node-gyp
% chmod 777 /Users/bakorer/.node-gyp

[Node.js] ExpressでBasic認証

ExpressでBasic認証を設定するメモ。

■ 全体にBasic認証

app.use(express.basicAuth('username', 'password'));

or

app.use(express.basicAuth(function(user, password) {
  return user === 'username' && password === 'password';
}));

■ 特定のRoutingにBasic認証

app.all('/admin/*', express.basicAuth(function(user, password) {
  return user === 'username' && password === 'password';
}));

参考情報

expressでbasic認証 – hokaccha.hamalog v2

[Node.js] Passport でログイン処理(OAuthなど)

Node.js でログイン処理を実装するなら Passport を使おうということで、参考サイトをメモ。

Passport – Simple, unobtrusive authentication for Node.js

node.js+express+PassportでOAuth認証 – Tech-Sketch

以上です。

[Node.js] Mac に npm をインストールする方法

Node.js のパッケージ管理ツール npm を Mac OS X Mountain Lion へインストールする方法をメモ。

事前に nodebrew で Node.js をインストールしている前提。

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

% curl https://npmjs.org/install.sh | sudo sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7882  100  7882    0     0   3979      0  0:00:01  0:00:01 --:--:--  7400
tar=/usr/bin/tar
version:
bsdtar 2.8.3 - libarchive 2.8.3
install npm@1.1
fetching: http://registry.npmjs.org/npm/-/npm-1.1.65.tgz
0.6.21-pre
1.1.65
cleanup prefix=/Users/bakorer/.nodebrew/current
 
All clean!
/Users/bakorer/.nodebrew/current/bin/npm -> /Users/bakorer/.nodebrew/current/lib/node_modules/npm/bin/npm-cli.js
npm@1.1.65 /Users/bakorer/.nodebrew/current/lib/node_modules/npm
It worked

正常に npm をインストールできたか確認する。

% npm --version
1.1.65

npm のアンインストールは下記のコマンドを実行するだけ。

% sudo npm uninstall npm -g

ちなみに、URLがhttpからhttpsへ変わったみたいなので注意。

httpでインストールしようとすると下記のようなエラーが出る。

% curl http://npmjs.org/install.sh | sudo sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    85    0    85    0     0     75      0 --:--:--  0:00:01 --:--:--   352
sh: line 1: syntax error near unexpected token `newline'
sh: line 1: `<html>Moved: <a href="https://npmjs.org/install.sh">https://npmjs.org/install.sh</a>'

以上です。

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

Node.js のバージョン管理ツール nodebrew を Mac にインストールする方法をメモ。

hokaccha/nodebrew · GitHub

nodebrew のインストール

% curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup

.zshrc や .bashrc に下記を追記する。

export PATH=$HOME/.nodebrew/current/bin:$PATH

リロード

% source ~/.bashrc

正常にインストールできたか確認する

% nodebrew help

あとは Node.js をインストールするだけ。

% nodebrew stable

しかし、色々とハマった場合は、以降の内容を参考にして下さい。

error: could not configure a cxx compiler!

% nodebrew install v0.6.21
fetch: http://nodejs.org/dist/v0.6.21/node-v0.6.21.tar.gz
######################################################################## 100.0%
Checking for program g++ or c++          : not found 
/Users/bakorer/.nodebrew/src/node-v0.6.21/wscript:273: error: could not configure a cxx compiler!

gcc をインストールする。
kennethreitz/osx-gcc-installer · GitHub

Checking for openssl : not found

openssl がインストールされているのに Checking for openssl : not found となる問題は、pkg-config をインストールすることで解決します。

% brew install pkg-config

Build failed: -> task failed (err #2)

下記のようなエラーで Node.js をインストールできない場合、Command Line Tools がインストールしていないのが原因なので、インストールする。

% nodebrew install v0.6.21
...(省略)...
make[1]: *** [src/unix/darwin.o] Error 1
Waf: Leaving directory `/Users/bakorer/.nodebrew/src/node-v0.6.21/out'
Build failed:  -> task failed (err #2): 
    {task: uv uv.h -> uv.a}
make: *** [program] Error 1

Command Line Tools は、

Xcode -> Preferences -> Downloads -> Command Line Tools

からインストールできる。

【参考】

node.js の環境管理ツール nodebrew – Block Rockin’ Codes

Installing node.JS on OS X 10.6 | Walt-O-Matic

node.js – Make errors when installing nodejs on OSX 10.7.4 – Stack Overflow