hell0w0rd
@hell0w0rd
Просто разработчик

Как вы организуете ваши nodejs приложения?

Допустим с sailsjs все понятно. А как быть с express, hapi? Я перехожу с Symfony, поэтому из app сделал некое подобие service-locator передаю его прямо в конструктор контроллера и он там берет нужные зависимости. В дальнейшем это можно разрулить через самописный двустрочный DI...
Но мой вопрос - может есть готовые решения какие-то?

Пример кода, используется ES6
class UserController {
    constructor(app) {
        this.conn = app.get('conn');
        this.validator = app.get('validator');

        var router = new express.Router();
        router.get('', this.all.bind(this));
        router.get('/me', this.me.bind(this));
        app.use('/api/users', router);
    }
}
  • Вопрос задан
  • 2392 просмотра
Пригласить эксперта
Ответы на вопрос 4
undassa
@undassa
Last.Backend
Странно что никто не предложил вам посмотреть в сторону yeoman генератора.
На данный момент ребята как раз стараются создать эталон организации приложений на ноде и других языках.

В наших приложениях мы используем примерно следующую структуру:
├── Gruntfile.js
├── app.js
├── config
│   ├── config.js
│   └── env
│       ├── all.js
│       ├── development.js
│       ├── production.js
│       └── staging.js
├── package.json
├── src
│   ├── controllers
│   │   └── controller.js
│   ├── lib - общие самописные библиотеки для всего приложения (например описание ошибок, логи и т.п.)
│   │   ├── error.js
│   │   ├── logger.js
│   │   └── routes.js
│   ├── modules - законченные модули
│       └── module.js
│   └── models - модель данных
│       └── model.js
└── templates
│       └── template.html
Ответ написан
Комментировать
mannaro
@mannaro
Умею профессионально гуглить
С организацией приложения на ноде, простите, жопа. Каждый пишет свой велосипед. Большинство корявые.
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
express очень низкоуровневой и отвечает за совсем уже базовые вещи. Поэтому никакой организации кода не предусмотрено, хоть все в один файл лепи (и иногда это оправдано).
Я лично использую структуру, которую генерит express + папки controllers, models, services и middlewares. Плюс папка settings, устроенная наподобие таковой в Django (если интересно, расскажу подробнее).
Ответ написан
hell0w0rd
@hell0w0rd Автор вопроса
Просто разработчик
Вот сейчас app.js привел к такому виду:
var express = require('express');
var config = require('./config');
var middlewares = require('./middlewares');
var services = require('./services');
var controllers = require('./controllers');

var app = express();
app.set('config', config);
services(app);
middlewares.before(app);
controllers(app);
middlewares.after(app);

module.exports = app;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы