mannaro
@mannaro
Умею профессионально гуглить

Правильная логика express (node.js)?

Здравствуйте! Подскажите пожалуйста, как вы реализуете логику в express-приложениях, использующих DB и пр.?

Была такая идея:
Код
var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , db = require('mongoose');

var app = express();

function init() {
  // all environments
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
  
  // development only
  if ('development' == app.get('env')) {
    app.use(express.errorHandler());
  }
  
  app.get('/', routes.index);
  app.get('/users', user.list);
  
  http.createServer(app).listen(app.get('port'), function(){
    console.log('Express server listening on port ' + app.get('port'));
  });
}

db.connect(database).connection.once('connect', init);
Но данный код мне кажется не очень правильным. Прошу помощи.
  • Вопрос задан
  • 9040 просмотров
Решения вопроса 1
Tenkoff
@Tenkoff
В данном контексте пофигу, почти все либы имеют буфер, куда попадают все ваши запросы.

Т.о. пока либа не восстановит соединение с бд все падает в буфер, до тех пор пока не вернется ошибка:

1) нет возомжности подключиться к бд
2) out of memory
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
dizballanze
@dizballanze
Software developer at Yandex
Не совсем понятен вопрос и к какой части кода он относился, но попробую ответить.
Логика работы с БД должна быть в моделях, т.к. express — mvc фреймворк. Например, если вы используете mongoose, то логику можно организовать в виде методов класса, хуков и тд.
Также я бы посоветовал вынести определение маршрутов в отдельный файл (имхо так удобнее).

п.с. я прочитал теги )
Ответ написан
pomeo
@pomeo
mannaro я писал вам в прошлом вопросе, посмотрите что генерит express ./appdir и пляшите от этого когда. Здесь github.com/visionmedia/express/tree/master/examples куча примеров чего и как писать.
Конкретно я делаю так, не помню где увидел.
Есть models.js
function defineModels(mongoose, fn) {
  var Schema     = mongoose.Schema,
      ObjectId   = Schema.ObjectId;
  var DataSchema = new Schema({
        'user_id'  : Number,
        'title'    : String,
        'datetime' : Date
        // и т.д.
  });

  mongoose.model('Data', DataSchema);
  
  fn();
}
module.exports.defineModels = defineModels;

в app.js такие строки
var express = require('express'),
  mongoose  = require('mongoose'),
  models    = require('./models.js');
  // и т.д.

mongoose.connect('mongodb://localhost/db');

models.defineModels(mongoose, function() {
  var Data = mongoose.model('Data');
})

и дальше по коду пляшем уже Data.findOne({...}) и т.д.
Опять же, здесь есть примеры github.com/LearnBoost/mongoose/tree/master/examples, в отличии от visionmedia их меньше, но их достаточно.
Ответ написан
Комментировать
Zelgadis
@Zelgadis
Как-то так: habrahabr.ru/post/143538/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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