web-dev-qa-db-ja.com

Node.js:別のファイルでの構成とルート

新しい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を実行したときにそれらを機能させるにはどうすればよいですか?
  • Hubotのような多くのアプリで見られるindex.coffeeを正確に含める必要がありますか?

誰かが「状況次第」以外の答えをくれたらいいのにと思います。

16
donald

requireを活用して、appvarをパラメーターとしてメソッドに渡すだけです。これは最も美しい構文ではなく、CoffeeScriptでもありませんが、アイデアを得る必要があります。

routers.js

module.exports = function (app) {
    // set up the routes themselves
    app.get("/", function (req, res) {
        // do stuff
    });
};

app.js

require("./routes")(app);

さらに一歩進めたい場合は、ルートを小さなグループに分け、独自のサブフォルダーに入れます。 (お気に入り: routes/auth.jsログイン/ログアウトの場合、routes/main.js自宅/概要/連絡先など)

ルート/index.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、ソース自体は同じままです)

35
Dominic Barnes

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へのリクエストを処理できるようになります。

7
Konrad Reiche

これであなたを大いに助けることができる2つの同様の質問があります:

express.jsアプリケーションを構築する方法は?

Nodejs/Expressjsアプリの構造

2
alessioalex