LoginSignup
24
24

More than 5 years have passed since last update.

express3からexpress4へアップグレードする時のチェックリスト

Last updated at Posted at 2014-11-12
  • 雑にメモります、随時更新中
  • ノウハウや参考記事があれば是非ご紹介ください

app.configure がなくなった

元々存在理由が不明だったやつ。
普通に if (app.get('env') === 'development') 的な条件分岐にする。

express.logger がなくなった

普通は morgan で代替する。

express.bodyParser が変わった

3 系でも非推奨だったので、この記事に含めるには微妙だけどついでに書いておく。

// extended: true だと 3 系と同じように
// name="foo[x]" value="val" を { foo:{x: "val"} } へ自動で展開する。
// README によると false 推奨っぽいのだが、何故そうなったのかは不明。
app.use(express.bodyParser.urlencoded({extended: true}));

multipart 用のミドルウェアについては、README にあるけど以下のどれかに変更してくれとのこと。

This does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules:

busboy and connect-busboy
multiparty and connect-multiparty
formidable
multer

所感:

  • miltiparty = 個別のミドルウェアが欲しいなら
  • multer = app.use で一括指定したいなら
  • formidable = フォーム処理的なものも付属している?
  • busboy = 用途が良くわからない、multer が中で使ってる

なお、旧 app.use(express.bodyParser()) も非推奨ログが出るけど動くは動く。

express.csrf がなくなった

替わりに csurf を使う。使い方は全く同じ。

/bin や /public の雛形が出来た

express-generator で生成すると binpublic ディレクトリができている。
今までオレオレ設定が気になっていた人は、このルールに合わせると少し幸せになれます。

$ express express-project 
$ tree express-project 
express-project
├── app.js
├── bin
│   └── www
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
└── views
    ├── error.jade
    ├── index.jade
    └── layout.jade

Router が出来た

未調査だが、ざっと見た感じ

app = express.Router()

で、グローバルに設定した app を返すようになり、各ファイルで

var app = express.Router();
app.get('/', function(req, req, next){});

できるようになっている。

また、子ルーターが設定できるよう? 非常に良い!

var router = express.Router();
router.get('/foo', function(req, req, next){});
router.get('/bar', function(req, req, next){});
// 未検証だけど、これで /calendar/foo と /calendar/bar が設定されるのではないか
app.use('/calendar', router);

app を階層構造で定義できるようになった

Router だけではなく、app そのものも階層構造を持てるようになりました。

var app = express();
app.get('/', ..略..);

var userApp = express();
userApp.get('/create', ..略..);

// '/' と '/user/create' にルーティングされる
app.use('/user', userApp);

// この mountpath のように、
// 階層構造を前提とした各種プロパティも用意されている
console.log(userApp.mountpath);  // -> '/user'

参考リンク

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24