カテゴリー : Node.js

Node.js 製 CMS「KeystoneJS」のアプリを作成して Heroku へ deploy する方法

Node.js 製 CMS「KeystoneJS」でアプリを作成して Heroku へ Deploy するまでやってみたので手順をご紹介します。

KeystoneJS | Node.js CMS

続きを読む

package.json 全て最新バージョンに更新して npm update したいなら npm-check-updates を使おう

Node.js で package.json に記載されている npm module のバージョンを全て最新に更新して npm update する手順をご紹介します。

npm

続きを読む

[Mongoose] Schema.Types.Mixed のフィールドに Error オブジェクトを保存する

Mongoose の Schema.Types.Mixed のフィールドに Node.js の Error オブジェクトをそのままだと保存できなかったので、toString() や _.toPlainObject() して保存したというお話です。

mongoose

続きを読む

[Mongoose] timestamp options で createdAt だけ使う

Mongoose の timestamp options で createdAt だけ使う方法を調べたけど、自分で pre hook に実装するしかなかったというお話です。

mongoose

続きを読む

[Mongoose] model.save({ validateBeforeSave: false }) で validate をスキップできる

Mongoose 4.2.0 から model.save() のときにバリデーションをスキップするためのオプション validateBeforeSave が追加されています。

mongoose

続きを読む

[Mongoose][timekeeper] TypeError: Undefined type `FakeDate` at `fieldName`

Node.js + Mongoose な構成のウェブサービスのテストコードで timekeeper という時間操作モジュールを利用していて FakeDate でハマったことをご紹介します。

mongoose

続きを読む

[Node.js] socket.io ではなくて socketio を npm install して Cannot find module ‘socket.io’ エラーでた

socket.io を使いたくて npm install socketio –save でインストール後に require(‘socket.io’) したら Error: Cannot find module ‘socket.io’ が発生して「なんでだろう…?」って数十分ぐらい悩みました。

$ node index.js
 
module.js:327
    throw err;
    ^
 
Error: Cannot find module 'socket.io'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/Users/bakorer/works/sample/index.js:9:16)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)

結果としては socketio が使うべきモジュールではなくて正しくは socket.io というオチでした。package.json を下記のように修正して npm install し直したら無事に require(‘socket.io’) できました。

diff --git a/package.json b/package.json
index 30cdfac..84192a7 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,6 @@
-    "socketio": "^1.0.0"
+    "socket.io": "^1.5.1"
   }
 }

socketio という紛らわしいパッケージ名はつけないで頂きたいですね。

[Node.js] npm package の実行ファイルは node_modules/.bin にシンボリックリンクで存在する

Node.js で npm install した package の実行ファイルは node_modules/.bin ディレクトリ配下にシンボリックリンクが自動作成されます。

npm logo

(例) とある node_modules/.bin 配下

$ ls -l ./node_modules/.bin
lrwxr-xr-x  1 codenote  staff  22 Apr 21 18:11 express -> ../express/bin/express
lrwxr-xr-x  1 codenote  staff  22 Apr 21 18:11 grunt -> ../grunt-cli/bin/grunt
lrwxr-xr-x  1 codenote  staff  16 Apr 21 18:11 jade -> ../jade/bin/jade
lrwxr-xr-x  1 codenote  staff  21 Apr 21 18:12 npm -> ../npm/bin/npm-cli.js

Node.js で開発して4年以上も経つのに知らなくて、自分でもびっくりしました。

ちなみに、モジュールにコマンドが用意されていた場合のみ /path/your_project/node_modules/.bin にシンボリックリンクが作成されます。

Mongoose documents を JSON に変換して response を返す

Express.js + Mongoose で documents を JSON に変換して response を返すには、

UserModel.find().lean().exec(function (err, users) {
  return res.json(users)
});

というような感じで lean() オプションを付けて plain javascript object を取得した値を res.json で返せばよいです。

参考情報

[Node.js] CSVTOJSON を使って CSV から JSON ファイルに変換する

CSVTOJSON という npm モジュールを利用して、CSV を JSON ファイルに変換するスニペットをご紹介します。

csvtojson をインストールする

npm install -g csvtojson

csvtojson を使って CSV から JSON ファイルへ変換する

var Converter=require("csvtojson").Converter;
var csvConverter = new Converter({
  constructResult: false,
  toArrayString: true
});
 
var pathName = "/Users/bakorer/Downloads/";
var readStream = require("fs").createReadStream(pathName + "sample.csv");
var writeStream = require("fs").createWriteStream(pathName + "sample.json");
 
readStream.pipe(csvConverter).pipe(writeStream);

以上です。