node.js / express application - 我应该把数据库连接逻辑放在哪里?
node.js / express application - where do i put the database connection logic?
背景信息
我刚刚创建了我的第一个快递应用程序。我可以看到它创建了一堆文件和默认文件夹结构。这是我的应用程序结构目前的样子:
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$
目标
我想创建一个名为 'widgets' 的新路由,当调用 GET 方法时,我需要调用 redis 数据库并执行查询。
URL 我想用来触发这个 get 是这样的:
http://myserver/tutorial1/widgets/
或
http://myserver/tutorial1/widgets/12345
其中 12345 是我要查询的小部件键。
到目前为止我做了什么
我找到了解释如何连接/查询 redis 数据库的文档:http://expressjs.com/en/guide/database-integration.html#redis
我还将 express 生成器为我创建的 "for free" 的 routes/users.js 复制到 routes/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 文件中吗?
如果有帮助,这里是 link 我的 app.js 文件的样子:http://pastebin.com/hAe5mvwt。我添加了 2 行 - 第 10 行和第 28 行。
任何关于好的教程的建议或 link 将不胜感激。
简短的回答是肯定的,MVC 工作得很好,数据库的东西当然可以进入模型。
但是,给猫剥皮的方法有很多种。对于此时相当微不足道的事情,我认为您应该做对您来说方便的事情,并且感觉像是一个相当干净的设计。
问题在于,随着您的系统变得越来越复杂,您需要一种方法来平稳地发展它。你永远不会拥有最终的终极 'best' 设计,因为现实会随着你的前进而改变。
请务必首先查看 node-modules.com、npmjs.com、npms.io,以探索许多(且种类繁多的)强大的已经实施和流行的设计。
我认为,如果您有时间,您应该探索多种不同的代码组织策略。
但更大的问题是,你如何才能在不完全破坏你的应用程序(并且不知道它)的情况下改变这个设计(你 最终会 想要改变它) )?
所以我认为与其现在过多地为代码组织而苦恼,不如花精力想出尽可能多地自动测试代码的方法。这样当您更改设计时,您将能够看到损坏的地方 -- 因此更改设计是可行的。
您需要在可行的情况下进行单元测试,否则需要集成测试、更大的案例端到端测试。
如果你能把一些东西放在它自己的 module/model file/whatever 中并作为一个单元单独测试,那么这可能比其他设计更好。
背景信息
我刚刚创建了我的第一个快递应用程序。我可以看到它创建了一堆文件和默认文件夹结构。这是我的应用程序结构目前的样子:
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$
目标
我想创建一个名为 'widgets' 的新路由,当调用 GET 方法时,我需要调用 redis 数据库并执行查询。 URL 我想用来触发这个 get 是这样的:
http://myserver/tutorial1/widgets/
或
http://myserver/tutorial1/widgets/12345
其中 12345 是我要查询的小部件键。
到目前为止我做了什么
我找到了解释如何连接/查询 redis 数据库的文档:http://expressjs.com/en/guide/database-integration.html#redis
我还将 express 生成器为我创建的 "for free" 的 routes/users.js 复制到 routes/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 文件中吗?
如果有帮助,这里是 link 我的 app.js 文件的样子:http://pastebin.com/hAe5mvwt。我添加了 2 行 - 第 10 行和第 28 行。
任何关于好的教程的建议或 link 将不胜感激。
简短的回答是肯定的,MVC 工作得很好,数据库的东西当然可以进入模型。
但是,给猫剥皮的方法有很多种。对于此时相当微不足道的事情,我认为您应该做对您来说方便的事情,并且感觉像是一个相当干净的设计。
问题在于,随着您的系统变得越来越复杂,您需要一种方法来平稳地发展它。你永远不会拥有最终的终极 'best' 设计,因为现实会随着你的前进而改变。
请务必首先查看 node-modules.com、npmjs.com、npms.io,以探索许多(且种类繁多的)强大的已经实施和流行的设计。
我认为,如果您有时间,您应该探索多种不同的代码组织策略。
但更大的问题是,你如何才能在不完全破坏你的应用程序(并且不知道它)的情况下改变这个设计(你 最终会 想要改变它) )?
所以我认为与其现在过多地为代码组织而苦恼,不如花精力想出尽可能多地自动测试代码的方法。这样当您更改设计时,您将能够看到损坏的地方 -- 因此更改设计是可行的。
您需要在可行的情况下进行单元测试,否则需要集成测试、更大的案例端到端测试。
如果你能把一些东西放在它自己的 module/model file/whatever 中并作为一个单元单独测试,那么这可能比其他设计更好。