Я разрабатывал с помощью node.js в течение нескольких месяцев, но теперь я начинаю новый проект, и я хотел бы знать, как структурировать приложение.
Моя проблема возникает, когда я говорю о модульном тестировании. Я буду использовать nodeunit для написания модульных тестов.
Также я использую экспресс для определения маршрутов REST.
Я думал о том, чтобы написать свой код, который обращается к базам данных в двух «отдельных» файлах (их, очевидно, будет больше, но я просто пытаюсь упростить код). Там будет код маршрута.
var mongoose = require('mongoose')
, itemsService = require('./../../lib/services/items-service');
// GET '/items'
exports.list = function(req, res) {
itemsService.findAll({
start: req.query.start,
size: req.query.size,
cb: function(offers) {
res.json(offers);
}
});
};
И, поскольку я использую там службу элементов, используемую только для доступа к слою данных. Я делаю это, чтобы протестировать только уровень доступа к данным при модульном тестировании. Это будет примерно так:
var mongoose = require('mongoose')
, Item = require('./../mongoose-models').Item;
exports.findAll = function(options) {
var query = Offer
.find({});
if (options.start && options.size) {
query
.limit(size)
.skip(start)
}
query.exec(function(err, offers) {
if (!err) {
options.cb(offers);
}
})
};
Таким образом, я могу проверить с помощью модульного тестирования, правильно ли он работает, и я могу использовать этот код везде, где захочу. Единственное, в чем я не уверен, правильно ли это было сделано, так это в том, как я передаю функцию обратного вызова для использования возвращаемого значения.
Как вы думаете?
Спасибо!