2012-12-17 90 views
0

我正在使用節點js/Express編寫一個大型程序(大小)。節點js調用函數

我有多個app.post函數和所有。 因此,他們中的大多數都需要對即將到來的請求進行驗證併發送響應。

所以,我創建了一個名爲Validate()的函數; 如果驗證失敗,我會發送回應告訴「請再次嘗試驗證失敗的信息」。

所以,我在REQ的

app.post('/',function(req,res){ 
... 

validate(); 
} 

所有必需的參數我寫的DB創建

function validate() { ...} 

,所以我可以訪問任何地方,因此現在是沒有問題的。 問題是: 如何發送「res」對象。 現在寫入驗證,如果我嘗試調用res。它會抱怨它沒有被定義。

那麼如何解決這個問題。

2)我試圖在數據庫中寫入validate()的響應。 之後,我試圖調用RES:是:

app.post('/',function(req,res){ 
... 

validate(); 

res .. 
} 

作爲節點是ASYC此功能驗證響應不使用的RE。

有任何一個遇到的問題是這樣

回答

4

你應該將它們作爲參數:

function validate(req, res) { 
    // ... 
} 
app.post('/', function (req, res) { 
    validate(req, res); 

    // ... 
}); 

你也可以把它定義爲一個自定義的中間件,調用第三個參數,next,當請求被認爲有效並將其傳遞給app.post as another callback時:

function validate(req, res, next) { 
    var isValid = ...; 

    if (isValid) { 
     next(); 
    } else { 
     res.send("please try again"); 
    } 
} 
app.post('/', validate, function (req, res) { 
    // validation has already passed by this point... 
}); 

Error handling in Express對於next(err)也可能是有用的。

+0

謝謝喬納森。也在函數聲明中,我們提到數據類型。我們不需要在這裏提及數據類型 –

+1

@TheLearner Nope。 JavaScript變量是動態的,所以你只需要命名它們 - https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Functions。但是,如果您使用另一種ECMAScript變體(如TypeScript),則可能需要指定類型。 –

+0

謝謝,這很明顯 –