Node.js

Bufferの連結

こんな感じでいいんだろうか function concatBuffer(bufs) { var len = bufs.reduce(function(a, b) { return a.length + b.length }) , buf = new Buffer(len) , start = 0; bufs.forEach(function(chunk) { chunk.copy(buf, start, 0); start += chunk.len…

node 0.6対応

0.6がリリースされたんでリリースしてるモジュールを対応させた。chain-tinyは大丈夫だったけどconfyとdata-sectionがテストこけてたので修正した。https://github.com/hokaccha/node-confy/commit/2bb4efab77c87ffd6c395c77d00b7890542d0630 process.ENVは…

mongooseでunsetできない

isuueあがってた https://github.com/LearnBoost/mongoose/issues/519Stringのカラムなら空文字とかにすればいいんだけど、ObjectIdとかにしてると詰む。unsetできないし空文字いれようとするとInvalid ObjectIdとかでエラるし。一度セットしたObjectIdの値…

lessのエラーハンドリングがイマイチ

lessけっこういいんだけどエラーハンドリングがイマイチで困る。@importでファイルがなかった場合process.exit()しちゃう。オーマイガ。 https://github.com/cloudhead/less.js/blob/198f7c9d96c1f70bb800afdd7bda5f2ce0e9d2b1/lib/less/index.js#L115-116pa…

chain-tinyにparallel追加

https://github.com/hokaccha/node-chain-tiny配列かハッシュを受け取って並列に処理して全部終わったら次に進む。nextに渡したのがresultsで受け取れる。まあ普通です。 var r = []; chain.parallel({ foo: function(next) { setTimeout(function() { r.pus…

jadeがテンプレート継承サポートしてた

0.16からextendsがサポートされたみたい。あとmixinとかincludeとかも0.13からサポートされてるみたい。expressのjadeのexsampleもextends使ったのになってる。 https://github.com/visionmedia/express/commit/a4aed5f51a2798b258efcbde89b55097f46e520blay…

expressでルーティング一覧を表示する

TJが書いてた。便利。 https://gist.github.com/1288766メソッドに色つけてパスでソートしてみた。 https://gist.github.com/1288919app.all('hoge') があったとき破綻するw

lessでGoogle Web Fonts APIがエラる

lessでこれがエラる。 @import "http://fonts.googleapis.com/css?family=Smythe"; file 'http://fonts.googleapis.com/css?family=Smythe.less' wasn't found..lessか.cssで終わらないやつに勝手に.lessってつけてないよっていわれる。issueにあがって直っ…

文字列のバイト数を求める

connectのmiddlewareつくって、なんか途中でレスポンスが切れてておかしいなと思ってたら、こうなってた。 res.writeHead(200, { 'Content-Length': str.length }); lengthだとマルチバイトも1とカウントするのでマルチバイトが入ってた場合にlengthが合わな…

chain-tinyというのを書いた

https://github.com/hokaccha/node-chain-tinyflowコントロール系のモジュール。flowコントロール系はnpmで探せば腐るほどあるのにも関わらずなんで書いたかというと、自分で書いて動作をちゃんと理解したかったからというのが最初の動機。書いてみると結構…

nodeunitでテストの最初と最後だけ処理したい

ようはDBの接続と切断をしたいんだけど、テスト全体の最初と最後になんか処理するみたいのはできんのかな。nodeunit.testCase()のsetUpとtearDownは一回のテスト毎に実行されるから毎回接続/切断してるとテストの速度が落ちるんだよなあ。 module.exports = …

connect sessionのデフォルトの生存期間

デフォルトのmaxAgeは14400000なんだけど、なんかすごく長いように見えてmsなんで実は4時間だった。

connect 2.0.0alpha1 Released

connectの2系がリリースされた。結構インターフェース変わってるっぽい。あと気を付けないといけないのがnpmにもあがってて、nodeのバージョンの依存が >= 0.5.0 すでにこういう問題が起きてる。 https://github.com/kcbanner/connect-mongo/issues/11これpa…

async.mapとかのサンプルの引数

https://github.com/fjakobs/async.js async.map(['file1','file2','file3'], fs.stat, function(err, results){ // results is now an array of stats for each file }); ぱっと見fs.statのところがわからんかったけど、まず素直に書くとこう。 async.map([…

package.jsonに--mongodb:nativeとか書く方法がわからない

GitHub - davglass/express-session-mongo: MongoDB session storage for ExpressJS これ使おうと思ったら this._db = new Db( dbName, server, { native_parser:true }); ってハードコードしてあって強制的にmongodbのBSONのネイティブパーサー使わないとい…

カッとなってconnect-external-sassというのを書いた

気晴らしに書いた。npmには上げてない。 GitHub - hokaccha/node-connect-external-sass: node-connect middleware for sass. using external ruby sass command.sassを動的にコンパイルするconnectのミドルウェア。node版のsassは微妙なんでこの際思い切っ…

expressとかconnectのmasterは開発ブランチ

expressとconnectウォッチしてて、ずっとmasterしか見てなかったけど、どうやらmasterは開発ブランチだということが最近わかった。connectのインターフェースがやたら変わってるんだけど、npmにリリースされてるのは前のインターフェースだということに気づ…

.npmignore書くべし

npmにアップするときは.npmignoreに書いたファイルは除外される。書くの忘れててconfyに.vimrc.projectとかいう恥ずかしいファイルが上がってた。内容どうするかだけど、他の人の見てみると.git*とかtest/とかが多いかな。testをnpmignoreするかどうかが迷い…

sha1を求める

これでよいのかな var crypto = require('crypto'); var sha1 = function(data) { return crypto.createHash('sha1').update(data).digest('hex'); }; console.log(sha1('foo')); // 0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33

中規模以上くらいのアプリでのexpressのルーティング

expressは軽量ですごくいいんだけど、アプリの規模が大きくなってくるとどうしても管理が煩雑になる。というのもapp.jsにコントローラー全部書いたらルーティングが20とか30以上くらいになってくるともう無理ーってなる。探してみたら色々あるみたい。 GitHu…

expressのapp.use(app.router)

の意味がいまいちわかってなかった。app.getとかapp.postとかを処理する場所を決めるというやつだった。app.useは登録した順番で呼ばれるので、app.use(app.router)がないこの例では、foo -> bar -> send('hoge') という順番で呼ばれる。 var express = requ…

expressでPOSTデータをJSONにする

なおexpressはレスポンスを返すときのJSONは適切に処理してくれるんだけど、現状ではリクエストとしてJSONがPOST/PUTされてきたときにはそれをどうにかしてくれたりしないので、自分で JSON.parse() にかけてやる必要があったりしてちょっと残念。その点、フ…

githubからnpm installする

Nodemailerにpull req送って取り込まれたのはいいものの、npmにアップしてくれないのでどうしたものかと思ってたけど、そういえばnpm installはtarballのURLも指定できたことを思い出したので、forkした自分のリポジトリにtagつけてtarballつくった。 https:…

socket.ioでtwitterのstreaming API

初socket.io。streaming API試すのはありがちだけどググってもsocket.ioのバージョン古い版しかなくてよくわからんかった。とりあえずこんな感じで動いた。socket.ioのバージョンは0.8.4。 // server var io = require('socket.io').listen(8000) , confy = …

confyってのをnpmにアップした

GitHub - hokaccha/node-confy: Manage settings library, like as pit.ようはnode版pit。ホントはpit互換にしたかったけどnodeのYAMLモジュールが微妙でpitと互換性とるのがむずかしかったのでpit互換は諦めた。あとconfy.getは非同期にしたくなかった(コ…

npm install -gしたモジュールにパスが通ってない

$ npm install -g nodeunitしたけどnodeunitがないって言われてなんぞと思ってみたら > require.paths [ '/Users/hokamura/.node_modules', '/Users/hokamura/.node_libraries', '/Users/hokamura/.nvm/v0.4.7/lib/node' ]ってなってて実際にインストールさ…

nodeでワンライナー

ヘルプみたら $ node --help Usage: node [options] script.js [arguments] node debug script.js [arguments] Options: -v, --version print node's version --v8-options print v8 command line options --vars print various compiled-in variables --max…

トップレベルで呼ばれたかどうかの判定

Pythonでいう if __name__ == "__main__": ... みたいなやつ。 if (!module.parent) { ... } こうかな。

exportsとmodule.exportsの違い

exportsにはそれ自体に代入できない。module.exportsはできる。ってのであってるのかな。ドキュメントにはソース読めって書いてあるけど読んでもよくわからんかった。 // hoge.js exports = function() { console.log('hoge') }; var hoge = require('hoge')…

expressのapp.localsが重複してる気がする

https://github.com/visionmedia/express/blob/6b161d5389339a976937ed2946998b4615bd366c/lib/http.js#L80-85 これと https://github.com/visionmedia/express/blob/6b161d5389339a976937ed2946998b4615bd366c/lib/http.js#L296-299 これ。app.localsのほう…