2014-09-26 61 views
0

I was told如果我想在不同的路徑文件中使用同一個express模塊​​,正確的做法是將它包含在每個路由文件中,而不是在app.js中全局使用。模塊應該在express.js的所有路由中使用app.use進行配置嗎?

現在我想知道是否我應該複製所有app.use以及所有這些,或者我應該只在app.js中執行一次。

如果在app.js中執行它,那麼我應該在app.js中包含所有這些模塊以及複製更多代碼。我對嗎?

爲了說明這一點更好,我將添加下面的例子:

/* routes/users.js 
-----------------------------------------------------*/ 
var express = require('express'); 
var app = express(); 

var http = require('http') 
var server = http.Server(app); 
var io = require('socket.io')(server); 
var path = require('path'); 

var swig = require('swig'); 
var request = require('request'); 

//for ZMQ 
var cluster = require('cluster'); 
var zmq = require('zmq_rep'); 

//for FORMS 
var bodyParser = require('body-parser'); 
app.use(bodyParser.json());  // to support JSON-encoded bodies 
app.use(bodyParser.urlencoded()); // to support URL-encoded bodies 

//for sessions 
var session = require('express-session') 
app.use(session({ 
    secret: '4658fsfdlh65/;-3De', 
    resave: true, 
    saveUninitialized: true 
})); 

//for CSURF security 
var csrf = require('csurf'); 
app.use(csrf()); 

//for security 
var helmet = require('helmet'); 

app.use(helmet()); 

我的理解是,我不得不重複以下在每一個我需要使用它們的路線包括在具有任何這些文件的初始內容是這樣的:

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

var http = require('http') 
var server = http.Server(app); 
var io = require('socket.io')(server); 
var path = require('path'); 

var swig = require('swig'); 
var request = require('request'); 

//for ZMQ 
var cluster = require('cluster'); 
var zmq = require('zmq_rep'); 

//for FORMS 
var bodyParser = require('body-parser'); 

//for sessions 
var session = require('express-session') 

//for CSURF security 
var csrf = require('csurf'); 

//for security 
var helmet = require('helmet'); 

那麼app.use呢?

回答

3

不,您不必複製app.use並且模塊包含在其他路徑文件中,您只能在app.js中執行此操作。
你只需要包含你想在路由文件中使用的模塊。

例如

var bodyParser = require('body-parser'); 
app.use(bodyParser.json());  // to support JSON-encoded bodies 
app.use(bodyParser.urlencoded()); // to support URL-encoded bodies 

這應該僅在應用程序一旦完成,你不必重複它的路線文件。
在您提供的鏈接中,您必須包含request模塊,因爲您要在該文件中使用該模塊。

我會建議你通過任何示例節點快車應用程序,以良好的理解組織代碼。例如https://github.com/madhums/node-express-mongoose-demo/

+0

在你的例子中,如果代碼放在app.js中,'bodyParser'將不能從路徑文件訪問。 – Alvaro 2014-09-26 11:38:49

+1

,但在路由文件中不需要'bodyParser',因爲在聲明路由之前已經使用'bodyParser'作爲中間件,因此它將爲每個請求執行其部分。 – 2014-09-26 11:42:22

+0

哦,我明白了,所以每當我使用'app.use'時,它都會在路由之前被觸發。但是我仍然需要複製包含不使用它的模塊,比如'var request = requiere('request')',它不使用'app.use'。我對嗎? – Alvaro 2014-09-26 11:47:47

相關問題