新しいNode.jsアプリを起動していますが、今回は、すべてを同じファイルに入れるのではなく、コードを正しく整理しようとしています。
私は今server.coffee
で簡単なセットアップしか持っていません:
express = require 'express'
app = module.exports = express.createServer()
## CONFIGURATION ##
app.configure () ->
app.set 'views', __dirname + '/views'
app.set 'view engine', 'jade'
app.use express.bodyParser()
app.use express.logger('dev')
app.use express.profiler()
app.use express.methodOverride()
app.use app.router
app.use express.static(__dirname + '/public')
app.configure 'development', () ->
app.use express.errorHandler({dumpExceptions: true, showStack: true})
app.configure 'production', () ->
app.use express.errorHandler()
app.get '/', (req,res) ->
res.render 'index'
title: 'Express'
## SERVER ##
port = process.env.PORT || 3000
app.listen port, () ->
console.log "Listening on port" + port
その単純なコードに関していくつか質問があり、すべての答えは開発者に依存することを知っていますが、私は本当にそれを正しくやりたいと思っています:
server.js
ファイルにはapp.listen
以上のものが必要ですか?正確には何があるべきですか?app.get
を他のファイルに削除して、server.coffee
を実行したときにそれらを機能させるにはどうすればよいですか?index.coffee
を正確に含める必要がありますか?誰かが「状況次第」以外の答えをくれたらいいのにと思います。
require
を活用して、app
varをパラメーターとしてメソッドに渡すだけです。これは最も美しい構文ではなく、CoffeeScriptでもありませんが、アイデアを得る必要があります。
module.exports = function (app) {
// set up the routes themselves
app.get("/", function (req, res) {
// do stuff
});
};
require("./routes")(app);
さらに一歩進めたい場合は、ルートを小さなグループに分け、独自のサブフォルダーに入れます。 (お気に入り: routes/auth.js
ログイン/ログアウトの場合、routes/main.js
自宅/概要/連絡先など)
// export a function that accepts `app` as a param
module.exports = function (app) {
require("./main")(app);
// add new lines for each other module, or use an array with a forEach
};
(名前の変更routes.js
以前からroutes/main.js
、ソース自体は同じままです)
Express 4 簡略化 これはexpress.Router
クラスを使用します。
ルートの整理に役立つもう1つの機能は、新しいクラス
express.Router
です。これを使用して、モジュール式のマウント可能なルートハンドラーを作成できます。Router
インスタンスは、完全なミドルウェアおよびルーティングシステムです。このため、「ミニアプリ」と呼ばれることがよくあります。次の例では、ルーターをモジュールとして作成し、その中にミドルウェアをロードし、いくつかのルートを定義して、メインアプリのパスにマウントします。
次の内容で、appディレクトリに
birds.js
という名前のルーターファイルを作成します。var express = require('express'); var router = express.Router(); // middleware specific to this router router.use(function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // define the home page route router.get('/', function(req, res) { res.send('Birds home page'); }); // define the about route router.get('/about', function(req, res) { res.send('About birds'); }); module.exports = router;
次に、アプリにルーターモジュールをロードします。
var birds = require('./birds'); app.use('/birds', birds);
これで、アプリは、ルートに固有の
timeLog
ミドルウェアを呼び出すとともに、/birds
および/birds/about
へのリクエストを処理できるようになります。