express3で外部ファイルで書かれたルーティングのイベントハンドラからappオブジェクトを使うための方法

Twitter ツイート Hatena Bookmark ブックマーク

タイトルこれでいいのかなって感じですが、要はroutes/以下に配置されたルーティング時の処理を記述ファイル内でappオブジェクトを使う方法っす。
一応「日本最速express3入門」を読みながらやっていたのですが、なぜかappオブジェクトが空だといわれますた。。。

コードはこんな感じです。

app.js

1
2
3
4
5
6
7
8
9
var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path')
  , redis = require('redis')
  , fs = require('fs');

// var app = express();
var app = module.exports = express();</code></pre>

で、routes/hoge.jsがこんな感じですた。

1
2
3
4
5
6
7
8
9
/*
 * GET home page.
 */
var app = module.parent.exports

exports.index = function(req, res){
  console.log(app);
  res.render('index', { title: 'Express' });
};

んで、console.logでappの中身確認してたら、空でした。
なんでだろうと悩んでしまいましたが、よーくみたらroutesをrequireするまえにapp変数にexpress()の値を入れてあげなきゃですよね。。。。
つまらないことで悩んでしまいました。。。。

ということでこういう感じapp.jsを記載してあげれば問題ないです。

1
2
3
4
5
6
7
8
9
var express = require('express');
var app = module.exports = express();
var routes = require('./routes')
  , user = require('./routes/user')
  , acount = require('./routes/account')
  , http = require('http')
  , path = require('path')
  , redis = require('redis')
  , fs    = require('fs');
comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。