Node.js

expressのhelpersとdynamicHelpers

removed old dynamic helper logic from the view system · expressjs/express@986916c · GitHub Removed `app.dynamicLocals()`. Closes #756 · expressjs/express@cd88b92 · GitHub dynamicHelpers(dynamicLoclas)はこの辺りで消されてる。middlewareで…

connect/proto.js

けっこう前だけどhttp.jsとhttps.jsが消えてproto.jsってのになってた。 Replaced HTTPServer and HTTPSServer with a function / proto · senchalabs/connect@e2cae7f · GitHub まだリリースはされてないみたいだけど、けっこう使い方かわってる気がする。…

removed connect/middleware/router

express使えってことかな Removed `router()` middleware. Closes #262 · senchalabs/connect@2ca7ec3 · GitHub

expressのreq.path

というのが追加されてる Added shorthand for the parsed request's pathname · expressjs/express@d10b7b4 · GitHub require('url').parse(req.url).pathname のショートハンドらしい。

connect/middleware/header

新しいミドルウェア追加された。レスポンスヘッダをダンプして出力するデバッグ用のやつっぽい。 Added `connect.header()`, tiny middleware for response header debuggi… · senchalabs/connect@81e5195 · GitHub

expressのhomeがbasepathになった

っぽい。 Merged basepath setting. Closes #813 · expressjs/express@e9abe1b · GitHub app.set('home', '/hoge'); とかやってつかうやつ。

nodeのYAMLモジュール

nodeでpitつくろうかと思ったけど、nodeのYAMLモジュールがRubyとかPerlでつくったYAMLのパースでエラって互換性とれなそうなので諦めた。 --- foo: bar まずyamlでこれをyaml.evalするとエラる。 Error: expected indent after document, near " \nfoo: bar…

async.forEach

非同期処理にはasync.jsを使ってて、大体async.series、async.parallelとかだけでやってたけど、forEachとかのループ中に非同期処理が入ってきたりすると面倒だなあと思ってた。そういうときはasync.forEach、async.forEachSeriesを使えばよさげ。 var async…

spawnでviを起動する

nodeの実行時にvi起動したくて例えばperlとかだと system 'vi /tmp/foo.txt'; とかで起動できて簡単なんだけどnodeで var exec = require('child_process').exec; exec('vi /tmp/foo.txt', function() { ... }); とかやっても起動しないのでどうしたもんかと…

expressのres.paramの変更

Added support for multiple callbacks for `app.param()`. Closes #801 · expressjs/express@ca75492 · GitHub app.param('foo', fn1); app.param('foo', fn2); ってのができるようになってことかな。たぶん。

expressにres.setとres.get追加

Added `res.set(field, val)` as an alternative to `res.header()` · expressjs/express@19a1a22 · GitHub Added `res.get(field)` as an alternative to `res.header(field)` · expressjs/express@c8c6aa2 · GitHubそれぞれres.setHeaderとres.getHeaderの…

connect/middleware/bodyParserのrawBody削除

されたみたい。 Removed `req.rawBody` from `bodyParser()` · senchalabs/connect@c3170ee · GitHubあってもいいと思うけど。まあほとんど使わんからいらんか。

expressのres.sendのインターフェース変わった

res.sendの引数の順番逆になったっぽい。 Changed `res.{send,json}()` status code to the first arg at all times · expressjs/express@c35cd7f · GitHub res.send('error', 400); だったのが res.send(400, 'error'); になったみたい。

mongooseのSchema.Types.Mixed

というのをSchemaのtypeに指定するとどんな型でも入れられるようになる。 var mongoose = require('mongoose') , Schema = mongoose.Schema; var FooSchema = new Schema({ bar: Schema.Types.Mixed });

mongooseでリレーション

embededじゃなくて正規化してリレーションしたい場合。これでいいのかわからんけど。mongoose.Schema.ObjectIdというのがSchemaの指定に使えるっぽいので var mongoose = require('mongoose') , Schema = mongoose.Schema , ObjectId = Schema.ObjectId; var…

sendgrid + nodemailerで文字化け

sengridのSMTPリレーでnodemailerからメール送ると日本語が一部文字化けた。たぶんnodemailerがencodeしてる部分だと思うんだけど、HTTPのAPIで送ったら文字化けなかったので、HTTPのほう使うことにして原因究明は放置。あとISO-2022-JPにしようとするとnode…

ejsが非力なのでどうにかしたい

とりあえず テンプレート継承がほしい(layout使いづらい) カスタムフィルター定義したい 渡してない変数はundefindeとかnullとかでうまい具体に処理してほしい(エラーにしないでほしい) とか。layoutはejsというよりexpressの機能だけど。そもそもlayout…

nodeでガラケー対応したメモ

Webサービス的なものをnodeでつくってて、ガラケー対応しないといけないことはわかってたんだけど、しばらくガラケー対応とかやってなかったので、すっかり文字コードのことを忘れてて痛い目みた。ガラケーだけPHPかPerlで書こうと思ったけど、そんなに大き…

モジュール内でのthis

nodeでrequireされたモジュール内のthisはmodule.exportsになる console.log(this === module.exports); // true なのでthisに値を設定するのはmodule.exportsに設定するのと基本的には同じ。ただしスコープつくってしまうとthisが変わるので注意 (function(…

enumerableがfalseのプロパティを見る

node.jsでconsole.logとかしてもenumerableがfalseなプロパティは見れない。 var o = Object.create(null, { foo: { value: 'bar', enumerable: false }, }); console.log(o.foo); // => bar console.log(o); // => {} o.fooはあるのにoをconsole.logしても…

node.jsのconsole.log

ってsprintfみたいなことできたのね。 console.log('foo %s', 'bar'); //=> foo bar

expressコードリーディング その2 connect/http.jsを読む

前回に引き続きconnect.jsを読む。今回はconnect/http.js。ここがconnectのコア。まず最初にコンストラクタ。ここでhttp.Serverを継承してる。んでhttp.Server.call(this, this.handle)ってやってるのでリクエストハンドラをthis.handleにしてる。リクエスト…

http.createServer()の最も簡単な例

connect読んでてそもそもhttp.createServerがどういうものかわかってなかったので。 var http = require('http'); var server = http.createServer(); server.on('request', function(req, res) { res.write(req.method + ' ' + req.url); res.end(); }); se…

nodeのmailerモジュールのtemplate

なんかnodemailerとかmailerとか名前が似てるけどmailerのやつ。 GitHub - Marak/node_mailer: ## Project deprecated, see READMEtemplateを指定するとテンプレートエンジンにmustache.jsを使ってレンダリングしてくれるんだけど、このとき、レンダリング結…

nodemailerで認証周りでエラーになる件が直ってた

なんか前回Sendgridではまりまくった件、やっぱり使ってたモジュールが原因だったっぽい。 SendGridのSMTPではまる - hokaccha.hamalog v2なんかこういうエラーがでてた。 events.js:45 throw arguments[1]; // Unhandled 'error' event ^ Error: 503 Alread…

node-devでrequireしたモジュールを監視できる仕組み

node-devがどういう仕組みでファイルを監視してるのか気になって調べたのでメモ。基本的にはfs.watchFileで監視するんだけど、ロードしてるモジュールも全部監視してるのが謎だった。node.jsはrequireでモジュールをロードするときrequire.extensionsという…

expressコードリーディング その1 connectを読む

使用するフレームワークのコードはちゃんと読んで理解しとけと偉い人が言ってた気がするのでexpressのコードを読んでみる。今回読むexpressのバージョンは2.4.3。 GitHub - expressjs/express at 2.4.3: Fast, unopinionated, minimalist web framework for …

http.Serverとhttp.createServerの違い

がよくわからんかったのでソース見たら exports.createServer = function(requestListener) { return new Server(requestListener); }; だった。

foreverでnode.jsの死活監視

daemontools使えばいいという話しなんだけど、node.jsの死活監視だけならforeverというのでモジュールでできるみたいなのでやってみた。 GitHub - indexzero/forever: A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)…

mongooseのmodelつくるところではまった

このコードはエラる。mongooseのバージョンは1.6.0。 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/mydb', function() { var UserSchema = new mongoose.Schema({ name: { type: String, unique: true } }); mongoose.model(…