2016-09-28 5 views
1

Основная информацияnode.js/express application - где я могу поместить логику подключения к базе данных?

Я только что создал свое первое экспресс-приложение. Я вижу, что он создал кучу файлов и структуру папок по умолчанию. Это то, что моя структура приложения в настоящее время выглядит следующим образом:

[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