Я пытаюсь создать простой плагин, чтобы получить данные от Mongo в объект, над которым я могу выполнять итерацию при рендеринге. Полный код находится в моем project, но суть его - неудачная попытка подражать примеру feedr. Я знаю, что мангуст материал работает в бревенчатых консоль работает, но получить содержимое, отправленное на объект DocPad побеждает меняDocpad: using extendTemplateData через обратный вызов mongoose
class mongoPlugin extends BasePlugin
name: 'mongo'
# Fetch list of Gigs
getGigsData: (opts) ->
mongoose.connect ('mongodb://localhost/test')
db = mongoose.connection;
db.on 'error', console.error.bind(console, 'connection error:')
db.once 'open',() ->
gigsSchema = mongoose.Schema {
date : String,
location : String
}
Gigs = mongoose.model 'Gigs', gigsSchema
Gigs.find {}, (err, gigs) ->
mongoose.connection.close()
if err then console.error "db error"
else
console.dir gigs
opts["getGigsData"] = gigs
opts.templateData["getGigsData"] = gigs
return gigs
extendTemplateData: (opts) ->
opts.templateData["getGigsData"] = @getGigsData()
Использование узла-инспектора и запуска регенерации путем редактирования docpad.coffee, я могу видеть, что opts имеет поле templateData, но он пуст и сильно отличается от docpad.templateData, поэтому я собираю неправильный объект в плагине. Я вижу, что другие делали трюк по размещению имени в {}, но я не знаю, что это делает.
После завершения кода плагина я вижу, что мои данные базы данных становится аргументом обещания, поэтому, возможно, что там предполагается реинтеграция с docpad.config.templateData, но это, кажется, не происходит на практике
Это замечательно. Для этого кода нужен еще один последний следующий(). –