# Структура Node.js приложения

Существует множество возможных способов организации Node.js-проектов и каждый из известных методов имеет свои плюсы и минусы:

* Организация файлов по функционалу (REST-ресурсам):

```
.
├── product
|   ├── index.js
|   ├── product.js
|   └── product.hbs
├── user
|   ├── index.js
|   ├── user.js
|   └── user.hbs
```

{% hint style="danger" %}
Недостатки:

* Иногда довольно таки сложно решить, в какой папке должен быть тот или иной файл
  {% endhint %}

{% hint style="success" %}
Преимущества:

* Чтобы добавить новый функционал или понять суть работы `product`, вам достаточно будет работы с файлами одного каталога `product`&#x20;

* большинство путей подключения файлов достаточно короткие `require( './product.js')`
  {% endhint %}

* Организация файлов по ролям

```
.
├── controllers
|   ├── product.js
|   └── user.js
├── models
|   ├── product.js
|   └── user.js
├── views
|   ├── product.hbs
|   └── user.hbs
```

{% hint style="danger" %}
Недостатки:&#x20;

* Чтобы понять, как работает страница product или добавить новый функционал в product, вам нужно открыть три различных каталоги с большим количеством файлов&#x20;
* длинные пути для подключения модулей: `require('../../controllers/product.js')`
  {% endhint %}

{% hint style="success" %}
Преимущества:&#x20;

* При добавлении новых файлов у вас не возникает вопросов по тому, куда стоит их добавлять
  {% endhint %}

[Одна из возможных реализаций структуры файлов в Node.js](https://medium.com/devschacht/node-hero-chapter-7-4078fa61ece6)
