2016-09-28 71 views
1

背景信息node.js /快速應用程序 - 我在哪裏把數據庫連接邏輯?

我剛剛創建了我的第一個快速應用程序。我可以看到它創建了一堆文件和默認文件夾結構。這是我的應用程序結構,目前的樣子:

[email protected]:/var/www/html/nodejs_samples/tutorial1$ ls -lah 
total 36K 
drwxr-xr-x 7 me me 4.0K Sep 28 09:26 . 
drwxrwxr-x 5 me me 4.0K Sep 28 08:45 .. 
-rw-rw-r-- 1 me me 1.5K Sep 28 08:45 app.js 
drwxr-xr-x 2 me me 4.0K Sep 28 09:20 bin 
drwxrwxr-x 96 me me 4.0K Sep 28 09:26 node_modules 
-rw-rw-r-- 1 me me 352 Sep 28 09:26 package.json 
drwxr-xr-x 5 me me 4.0K Sep 28 08:45 public 
drwxr-xr-x 2 me me 4.0K Sep 28 09:26 routes 
drwxr-xr-x 2 me me 4.0K Sep 28 08:45 views 
[email protected]:/var/www/html/nodejs_samples/tutorial1$ 

目標

我想創建一個名爲「小部件」並調用GET方法時,我需要調用的Redis數據庫中的新航線並執行查詢。 我想用它來觸發此獲取URL是這樣的:

http://myserver/tutorial1/widgets/ 

http://myserver/tutorial1/widgets/12345 

其中12345是我要查詢的窗口小部件的關鍵。

我所做到目前爲止

,我發現這個文檔解釋瞭如何連接/查詢Redis的數據庫:http://expressjs.com/en/guide/database-integration.html#redis

我也複製路線/ users.js的快遞發電機創建「免費」爲我的路線/ widgets.js作爲一個起點。

這是我的路線/ widgets.js文件看起來是這樣的:

[email protected]:/var/www/html/nodejs_samples/tutorial1$ cat routes/widgets.js 
var express = require('express'); 
var router = express.Router(); 

/* GET widgets listing. */ 
router.get('/', function(req, res, next) { 
    res.send('respond with a resource'); 
}); 

module.exports = router; 

問題

這不是我清楚,我要補充的數據庫連接邏輯和查詢邏輯。我習慣於將所有數據庫邏輯分解到模型中的MVC。

我可以把一切都放在route/widgets.js文件中嗎?

如果有幫助,下面是我的app.js文件的外觀:http://pastebin.com/hAe5mvwt。我添加了2行 - 第10行和第28行。

任何建議或鏈接到好的教程將不勝感激。

+0

你*可*,但它然後直接耦合到路由處理程序。從這種方式開始就很好,但我更喜歡更緊密的關注點分離。最終,這可以歸結爲意見:沒有一種特定的「正確」方式來分解功能。 –

回答

0

簡短的回答是肯定的,MVC運行良好,數據庫的東西肯定會進入模型。

但是,有很多方法去皮膚貓。在這一點上,我覺得你應該做一些對你來說很方便的事情,而且感覺就像一個相當乾淨的設計。

問題是,隨着您的系統變得越來越複雜,您需要一種順利演進的方式。你永遠不會擁有最終的「最佳」設計,因爲現實會隨着你的變化而變化。

請務必首先查看node-modules.com,npmjs.com,npms.io,以探索已經實施並且流行的許多(以及各種各樣)強大的設計。

我認爲你應該探索,如果你有時間,多種不同的策略來組織你的代碼。

更大的問題,雖然是,你怎麼可能改變這種設計在路上(你想最終改變它)沒有完全打破您的應用程序(和不知道的話)?

因此,我認爲現在不要爲代碼組織過度折騰,而是花費這些努力來設法自動測試儘可能多的代碼。通過這種方式,當您更改設計時,您將能夠看到什麼破碎 - 因此可以更改設計。

您希望單元測試在哪裏可行,否則集成測試,大型案例端到端測試。

如果您可以將某些東西放入其自己的模塊/模型文件/任何中,並將其作爲一個單元單獨進行測試,那麼這可能比其他設計更好。

+0

我很喜歡你的建議。將代碼分解爲可測試單元是我記住的一個很好的總體原則。我想我會做的是開始將所有內容放入特定的路徑文件中...只是爲了學習節點和表達...然後一旦我熟悉它...可能會戴上測試帽並重新訪問我的示例代碼來查看什麼樣的重構最能支持測試。 – Happydevdays

相關問題