2012-07-15 35 views
3

我正在設計一個應用程序與node.js和Express,我想知道是否有可能將某些路由邏輯移出app.js文件。對於exapmle,我app.js目前包含:移動路由邏輯出app.js

app.get('/groups',routes.groups); 
app.get('/',routes.index); 

是否有推動這一邏輯出app.js文件,只有碰到這樣的方式:

app.get('/:url',routes.get); 
app.post('/:url",routes.post); 

使得所有GET請求將由routes.get和所有POST請求處理與routes.post

回答

5

你可以通過正則表達式的路由定義:

app.get(/.+/, someFunction); 

這將匹配任何內容。但是,如果你只是想將您的主app.js文件之外你的路由定義,它是非常清晰的做這樣的事情:

app.js

var app = require('express').createServer(); 

... 

require('routes').addRoutes(app); 

routes.js

exports.addRoutes = function(app) { 
    app.get('/groups', function(req, res) { 
     ... 
    }); 
}; 

這樣,你還在使用快車內置的路由,而不是重新滾動自己(因爲你必須在你的例子做)。

0

完整披露:我是下面提到的節點模塊的開發人員。

有一個節點模塊可以滿足你所要求的(最終會做更多的)。它提供基於約定配置的快速自動路由。模塊名稱爲honey-express,但目前處於alpha開發階段並且尚未在NPM上提供(但您可以從https://github.com/jaylach/honey-express處獲得該源代碼)

它是如何工作的簡短示例:(請注意,此coffeescript )現在

# Inside your testController.coffee file. Should live inside /app/controllers 
honey = require 'honey-express' 

TestController = new honey.Controller 
    index: -> 
     # @view() is a helper method to automatically render the view for the action you're executing. 
     # As long as a view (with an extension that matches your setup view engine) lives at /app/views/controller/actionName (without method, so index and not getIndex), it will be rendered. 
     @view() 
    postTest: (data) -> 
     # Do something with data 

,裏面你app.js文件,你只需要設置一些簡單的配置:

# in your app.configure callback... 
honey.config 'app root', __dirname + '/app' 
app.use honey.router() 

現在,只要請求到來時,蜂蜜會自動尋找與指定的路由控制器,然後查找匹配的ac和灰..例如 -

  • /測試將自動路線的 索引/ getIndex()方法的TestController
  • /將自動路線的HomeController的索引/ getIndex()方法(默認的控制器如果它存在
  • 如果http方法是POST,test/test將自動路由到testController的postTest()方法。

正如我所提到的,模塊目前處於alpha狀態,但自動路由工作非常好,現在已經在兩個不同的項目上測試過了:)但是由於它是在alpha開發中,文檔缺失。如果你決定走這條路,你可以看看我在github上的樣本,查看代碼,或者聯繫我,我很樂意幫助:)

編輯:我也應該請注意,honey-express確實需要最新(BETA)版本的快遞,因爲它使用Express 2.x中不存在的功能。

+1

聽起來像一個很酷的模塊,傑森。似乎它對於快速資源REST API也可能非常有用。 – JohnnyHK 2012-07-15 19:03:47

+0

看起來很有趣 - 我一定會關注一下,因爲我將在不久的將來開發一個REST API。雖然Express和MongoDB/Mongoose可以很容易地按原樣設置。 – rahulmehta95 2012-07-16 03:30:13

+0

謝謝你的評論:)如果你們中的任何一個人決定去看看,我會非常有興趣聽到你的意見/想法/想法:) – 2012-07-16 15:13:33