Size: a a a

Флудилка нодскула

2016 May 20

IP

Igor Perfilyev in Флудилка нодскула
к в этот модуль правильно передать объект управления записями в субд?
источник

IP

Igor Perfilyev in Флудилка нодскула
для примера, в монге это довольно удобно реализовано через коллекции, вот например как правильно передать в модуль коллекцию?
источник

IP

Igor Perfilyev in Флудилка нодскула
у меня в голове только два варианта, замкнуть каждый метод на объявленную ранее колелекцию, user/save = (user) => collection.save(save)
источник

IP

Igor Perfilyev in Флудилка нодскула
или передавать коллекцию явно user/save = (collection, user) => collection.save(user)
источник

NK

ID:57684913 in Флудилка нодскула
я так делаю
источник

NK

ID:57684913 in Флудилка нодскула
может и неправильно зато в любой точке видно все что на входе и все что на выходе, а-ля полу-функциональный подход :)
источник

NK

ID:57684913 in Флудилка нодскула
/**
* Create resource if not exists
*/
function findResourceOrCreate(resourceCollection, resourceId, payload = {}) {

 const _id = resourceId
 const created = new Date()
 const doc = Object.assign({}, payload, { _id, created, count: {} })

 return resourceCollection.findAndModify({ _id }, [], {
     $setOnInsert: doc
 }, {
   new: true,
   upsert: true
 })
}
источник

IP

Igor Perfilyev in Флудилка нодскула
я тоже так сделал сначала
источник

IP

Igor Perfilyev in Флудилка нодскула
ой, но скачала скажи, как ты передаешь resourceCollection в модуль?
источник

IP

Igor Perfilyev in Флудилка нодскула
по идее, при таком подходе, у тебя в модуль должна быть одна точка входа
источник

NK

ID:57684913 in Флудилка нодскула
модуль это набор независимых функций, ни одна из них не использует вернхюю область видимости
источник

NK

ID:57684913 in Флудилка нодскула
module.exports = {
...
 findResourceOrCreate,
...
}
источник

IP

Igor Perfilyev in Флудилка нодскула
ага, т.е. ты бы сделал module.exports.save = (collection, user) => collection.save(user)
источник

NK

ID:57684913 in Флудилка нодскула
а в нужном месте:
const model = require('../models/resource')
...
const resourceCollection = mongodb.collection('resources')
...
return model.findResourceOrCreate(resourceCollection, resourceId, input)
источник

NK

ID:57684913 in Флудилка нодскула
мне так удобнее тестировать
источник

NK

ID:57684913 in Флудилка нодскула
потому что обычно коллекция доступна не сразу (когда модуль реквайрится) а после определенного времени когда подключение к базе произойдет
источник

NK

ID:57684913 in Флудилка нодскула
а тут я в любой момент времени при вызове функции передаю актуальную коллекцию
источник

NK

ID:57684913 in Флудилка нодскула
в тестах мокаю если надо
источник

NK

ID:57684913 in Флудилка нодскула
ну и заменять легко... по крайней мере в текущий момент я такой подход юзаю, может через пару месяцев окажется говнокодом и буду по-другому, хз :)
источник

IP

Igor Perfilyev in Флудилка нодскула
а у тебя бывает такое, что вызов model.findResourceOrCreate происходит в разных местах?
источник