2017-04-09 76 views
0

我在我的應用程序中使用名爲Grant的庫。之前我已經將它包含在上面鏈接的自述文件中的示例中,但是現在我需要有條件地包含它,並且我似乎無法使其工作。如何有條件地使用Express包含子應用程序?

它是如何

const grant = new Grant(grantConfig); 
app.use(grant); 

我已經在快遞之前完成條件中間件工作過,所以我想包括格蘭特不會是一個問題。

我怎樣努力(不工作)

const grant = new Grant(grantConfig); 

app.use((req, res, next) => { 
    if (someBooleanVariable) { 
     next(); 
    } else { 
     grant(req, res, next); 
    } 
}); 

所以這是行不通的。我認爲這可能與Grant作爲Express的一個實例而不是普通的中間件功能有關,但我不確定。您可以看到Grant如何實施here。 Express文檔表示應該對待它,但我也可能會誤解它們。

注:我需要這個工作在每個請求的基礎上,因此中間件風格的方法。

+0

你試過app.use(補助金);在這個else語句裏面? –

+0

您是否真的需要在每個請求的基礎上使用它,或者您是否只需要它用於特定路由? – robertklep

+0

當我嘗試它時,app.use(grant)不起作用。理想情況下,我需要在路線的一個子集上使用它。 –

回答

1

如果要使用特定的中間件僅路線的一個子集:

// On a single route: 
app.get('/some/route', grant, function(req, res) { 
    ... 
}); 

// On a set of routes with a particular prefix: 
app.use('/api', grant, apiRouter); 

// On a specific router: 
let apiRouter = express.Router(); 

apiRouter.use(grant); 
apiRouter.get(...); 
相關問題