node.js / express application - 我在哪里放数据库连接逻辑?

时间:2016-09-28 13:36:26

标签: javascript node.js model redis node-redis

背景资料

我刚创建了我的第一个快递申请。我可以看到它创建了一堆文件和默认的文件夹结构。这就是我的app结构目前的样子:

me@mydevbox:/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
me@mydevbox:/var/www/html/nodejs_samples/tutorial1$ 

目标

我想创建一个名为'小部件的新路线'并且当调用GET方法时,我需要调用redis数据库并执行查询。 我想用来触发这个get的URL是这样的:

  http://myserver/tutorial1/widgets/

  http://myserver/tutorial1/widgets/12345

其中12345是我要查询的小部件键。

到目前为止我做了什么

我发现此文档解释了如何连接/查询redis数据库:http://expressjs.com/en/guide/database-integration.html#redis

我还复制了快速发电机创建的路线/ users.js"免费"以route / widgets.js为出发点。

这就是我的routes / widgets.js文件的样子:

me@mydev:/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行。

任何有关优秀教程的建议或链接都​​将不胜感激。

1 个答案:

答案 0 :(得分:0)

简短的回答是肯定的,MVC运行良好,数据库的东西肯定会进入模型。

但是,有很多方法可以给猫皮肤。在这一点上有一些相当微不足道的东西,我认为你应该做一些方便你的事情,感觉就像一个相当干净的设计。

问题在于,随着系统变得越来越复杂,您需要一种方法来平滑地发展它。你永远不会有最终的终极'最好的'设计,因为现实会随着你的变化而变化。

请务必首先查看node-modules.com,npmjs.com,npms.io,以探索已经实施和流行的众多(且各种各样)功能强大的设计。

我认为如果你有时间,你应该探索多种不同的策略来组织你的代码。

更大的问题是,你怎么可能在未完全破坏你的应用程序(并且不知道它)的情况下改变这种设计(你 想要最终改变它)?

所以我认为现在不要过多地为代码组织而烦恼,而是花费精力来提出尽可能多地自动测试代码的方法。这样,当您更改设计时,您将能够看到发生了什么 - 因此更改设计是可行的。

您希望在可行的情况下进行单元测试,否则需要集成测试,大型端到端测试。

如果您可以将某些东西放入其自己的模块/模型文件中,并将其作为一个单元进行单独测试,那么这可能比其他设计更好。