2017-02-25 193 views
0

我正在使用express的節點。節點+回調函數傳遞參數

我有兩個休息api,api之間的區別只是數據庫表而已。

API - 1種 http://localhost/test1

API - 2 http://localhost/test2

兩者都是交方法,

router.post('test1', findAll); 

router.post('test2', findAll); 

function findAll(req, res){ 
//Here test1 api result get from different db table. 
//Here test2 api result get from different db table. 
How can I sent the db table name in parameters? 
//Here have logic in db and return results. 
res.send(spec.resp); 

} 

注:我需要使用相同的功能,兩個API,但表名只會改變。

回答

1

您可以創建兩種功能,採用常見的findAll方法類似以下內容:

function findAllFromTable1(req, res, next){ 
    return findAll("table1", req, res, next); 
} 

function findAllFromTable2(req, res, next){ 
    return findAll("table2", req, res, next); 
} 

function findAll(tableName, req, res, next){ 
//db logic 
res.send(spec.resp); 

} 

router.post('test1', findAllFromTable1); 

router.post('test2', findAllFromTable2); 

但我建議你到你的數據庫邏輯從路由處理分開,這樣反而有一個功能,處理數據庫,併發送回響應,有一個包含db邏輯的函數,然後在路徑句柄中使用該結果發送您的響應。這將使您的代碼易於理解,易於測試並避免冗餘。

function findAllFromDB(){ 
    //db logic 
    return dbResult; // returns a promise since db operations are async. 
} 

router.post('test1', function(req, res, next){ 
    findAllFromDB 
    .then(function(dbResult){res.send(dbResult)}) 
    .catch(function(err){ res.status(500).send(err);}) 
}); 
+0

如果我錯了意味着請糾正我。需要爲每個db結果創建函數? – RSKMR

+0

或請舉一個例子。我沒有;「getAllFromDB」 – RSKMR

+0

Db邏輯取決於你正在使用哪個數據庫和你正在使用哪個ORM庫。但總的來說,對於每種不同的資源,您都應該生成一個輔助函數。 – cubbuk