2012-01-05 42 views
1

連接的node.js應用我八九不離十新於一般這樣的藉口的Node.js和網絡編程,如果我問奇怪的問題:d共享404頁跨越通過VHOST

所以這裏是我建立我的方式表達node.js項目。
我有一個頂層app.js簡單地將流量重定向到幾個子域:

var app = module.exports = express.createServer(options); 
app.use(express.vhost('blog.localhost', require('./apps/blog/blog.js'))); 
app.use(express.vhost('app1.localhost', require('./apps/app1/app1.js'))); 
app.use(express.vhost('login.localhost', require('./apps/login/login.js'))); 

在各個子應用程序,這包括通過需要(),我簡單地返回一個新的Express服務器:

module.exports = express.createServer(options); 

什麼是最優雅的方式來建立一個404頁面?當我還是用單一的應用程序,我只是用

app.use(function(req, res, next){ 
    res.render('404', { 
    }); 
}); 

但是,如果我用這個方法,我將不得不創造每一個應用程序一個404.jade和我不喜歡代碼的重複無用。任何想法如何跨多個虛擬主機共享單個404邏輯?

回答

0

您有3個主機需要3個路由文件。我的建議是要求在每個這條404路由中,從一個外部文件。 這樣你就可以擁有每個主機的404路由,但它只會駐留在一個地方。

實施例:

404路由文件 - 404.js

module.exports = function (app, req, res, options) { 
    app.get('/404', function(req, res, next) { 
    res.render('404', { options: options }); 
    }); 
} 

路由主機A

// define other routes here 
... 
// you pass the app, req, res as params 
// the last param is for local vars sent to the view 
require('./routes/404.js')(app, req, res, { host: 'HostA' }); 
+0

感謝您的快速響應。我試圖避免這種依賴,因爲在主機A中運行的應用程序必須知道主應用程序的目錄結構。也許這是實現這一目標的唯一方法。 – user1131735 2012-01-05 22:58:01

+0

除非你想在任何地方複製它,否則這是唯一的方法。 – alessioalex 2012-01-06 12:45:07