2016-01-19 32 views
0

我的Express/Node.js應用程序中有一箇中間件來保護特定的路線。快遞中間件意味着請求超時

的事情是,當我使用這個中間件,我得到一個請求超時如果credentals檢查是錯誤的

這裏是代碼我目前使用的:

var express = require('express'); 
var bodyParser = require('body-parser'); 

// Set Header because cross-domain call 
app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "http://docker.local"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Authorization, Content-Type, Accept"); 
    next(); 
}); 

function checkAuth(req, res, next){ 
    if(// Credentials right){ 
     next(); 
    } else { 
     // If code enter in that case, it will generate a Timeout 
     // even with next(); ... 
    } 
} 

// Use checkAuth to protect route 
app.get('/server', checkAuth, getMessages); 
app.get('/', function(req, res){ 
    res.status(200).send('Slack Server is listening for outgoing webhooks ...'); 
}); 

的問題是:爲什麼我得到這個超時?

編輯

如果我使用的瀏覽器進行GET請求,那麼我請求超時。但是,如果我以另一種方式觸發GET請求,那麼我不會超時並且代碼正常工作。有沒有可能讓GET /favicon搞砸這些東西?

回答

4

app.use要求您撥打next繼續下一個中間件或堆棧中的請求。

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "http://docker.local"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Authorization, Content-Type, Accept"); 
    next(); 
}); 

Reference

+0

有時候,我只是想衝我的臉...謝謝了很多! – Mornor

+0

**編輯**在正確憑證的情況下工作,但不重定向('res.redirect('/')')。任何原因? – Mornor

+0

用新代碼更新你的問題,但我猜你正在調用下一個*和*重定向,這應該會失敗,並出現'headers alreadybsent'錯誤。 – Paul