0

I'm trying to integrate one Express app with Docpad. What I want most is share layouts between my static pages and my Express views.

In the process I follow this instructions of question 16332833, with:

var docpadInstanceConfiguration = {
    action: 'generate',
    env: 'static'
};
require('docpad').createInstance(docpadInstanceConfiguration, function(err,docpadInstance){
    if (err)  return console.log(err.stack);
    // ...
});

I'm getting the following error:

info: Generating...
notice: DocPad is currently running without any plugins installed. You probably want to install some: http://docpad.org/plugins

TypeError: path must be a string
    at fs.exists (fs.js:166:11)
    at Task.method (/Users/../node_modules/docpad/node_modules/safefs/out/lib/safefs.js:183:14)
    at ambi (/Users/../node_modules/docpad/node_modules/ambi/out/lib/ambi.js:22:16)
    at /Users/../node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:117:19
    at b (domain.js:183:18)
    at Domain.run (domain.js:123:23)
    at Task.fire (/Users/../node_modules/docpad/node_modules/taskgroup/out/lib/taskgroup.js:116:21)
    at process._tickCallback (node.js:415:13)
    at Function.Module.runMain (module.js:499:11)
    at startup (node.js:119:16)
    at node.js:901:3

without options, and var docpadInstanceConfiguration = {}; there is no errors:

info: Welcome to DocPad v6.52.1
info: Contribute: http://docpad.org/docs/contribute
info: Plugins: cleanurls, coffeescript, downloader, eco, less, livereload, marked, partials, related, stylus, text
info: Environment: development

Any idea for getting shared layouts between docpad and express views, and get csrf protection for example? (I'm using ectjs for my views, is eco compatible)

Thanks

Community
  • 1
  • 1
bolila
  • 58
  • 3
  • I can reproduce, definitely seems like a bug, will see what I can do about a fix. Thanks for reporting. – balupton Sep 10 '13 at 07:46

1 Answers1

0

Turns out you need the load and ready actions prior to the generate, like so:

var docpadInstanceConfiguration = {
    action: 'load ready generate',
    env: 'static'
};
require('docpad').createInstance(docpadInstanceConfiguration, function(err,docpadInstance){
    if (err)  return console.log(err.stack);
    // ...
});

However looking at the API docs it doesn't seem doing actions in this way is the right way at all, instead we should do:

var docpadInstanceConfiguration = {
    env: 'static'
};
require('docpad').createInstance(docpadInstanceConfiguration, function(err,docpadInstance){
    if (err)  return console.log(err.stack);
    var generateOpts = {};
    docpadInstance.action('generate', generateOpts, function(err,result){
        if (err)  return console.log(err.stack);
        // ...
    });
});
balupton
  • 47,113
  • 32
  • 131
  • 182