2015-04-19 2 views
2

Je veux utiliser le moteur de modèle marko avec express.js 4.0 Lorsque je supprime le défaut moteur de template express J'obtiens l'erreur suivanteComment configurer le moteur de template marko dans express.js 4.0

Erreur: Aucun moteur par défaut a été spécifié et aucun l'extension a été fournie. à la nouvelle vue (E: \ nodeleap \ node_modules \ express \ lib \ view.js: 48: 42) à EventEmitter.app.render (E: \ nodeleap \ node_modules \ express \ lib \ application.js: 545: 12) à ServerResponse.res.render (E: \ nodeleap \ node_modules \ express \ lib \ response.js: 938: 7) à E: \ nodeleap \ config \ express.js: 106: 19 à Layer.handle [ comme handle_request] (E: \ nodeleap \ node_modules \ express \ lib \ routeur \ layer.js: 82: 5) at trim_prefix (E: \ nodeleap \ modules_noeud \ express \ lib \ routeur \ index.js: 302: 13) à l'adresse E: \ nodeleap \ node_modules \ express \ lib \ routeur \ index.js: 270: 7 à Function.proto.process_paramètres (E: \ nodeleap \ node_modules \ express \ lib \ router \ index.js: 321: 12 à l'étape suivante (E: \ nodeleap \ node_modules \ express \ lib \ routeur \ index.js: 261: 10) a t Layer.handle [comme handle_request] (E: \ nodeleap \ node_modules \ expresse \ lib \ router \ layer.js: 78: 12)

+2

README le projet [ce dans la FAQ mentionne] (https://github.com/raptorjs/ marko # faq) - "* Comment Marko peut-il être utilisé avec Express? *" "* La manière recommandée d'utiliser Marko avec Express est de contourner le moteur de vue Express et de rendre Marko directement au flux de réponse [... ] * " –

Répondre

2

Il semble que marko ne soit pas encore supporté par les moteurs de vues express (voir ici: https://github.com/tj/consolidate.js)

Editer: Mais la FAQ Marko recommande de ne pas utiliser le moteur de vue express. L'option 1 ci-dessous devrait fonctionner. Donc, je vois quelques options, 1. Rendez simplement vos modèles en utilisant marko directement dans chacune de vos routes ou 2. Configurez votre propre moteur de vue express, et peut-être même 3. Faites un PR à consolate.js pour ajouter le soutien marko afin que les autres puissent profiter :)

options 1 et 2 ressemblerait à quelque chose comme ceci:

var express = require('express'); 
var app = express(); 
var fs = require('fs'); 
var marko = require('marko'); 

// Option 2 
app.engine('marko', function(filePath, options, callback) { 
    marko.load(filePath).render(options, function(err, output) { 
     callback(null, output); 
    }); 
}); 

app.set('views', './views'); 
app.set('view engine', 'marko'); 

app.get('/viewengine', function(req, res) { 
    res.render('hello', { 
     name: 'Frank' 
    }); 
}); 

// Option 1 
var template = marko.load(require.resolve('./views/hello.marko')); 
app.get('/marko', function(req, res) { 
    template.stream({ 
     name: 'Frank' 
    }) 
     .pipe(res); 
}); 

var server = app.listen(3000, function() { 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log('Example app listening at http://%s:%s', host, port); 
}); 
+0

Hmm, il semble que je n'ai pas RTFM, vous devriez certainement suivre le conseil de Jonathan (option 1) –

+1

Notes sur l'option 2 - Le' callback' peut être passé à '.render()' à la place de la fonction ' (err, output) ', ce qui permet à Express d'être conscient de tout' err' qui se produit. Vous pouvez également vouloir vérifier 'options.cache' et stocker les vues' .load''ed par leur 'chemin's si c'est' true' pour éviter de toujours recompiler avec chaque utilisation. –