2014-01-19 24 views
0

我试图让dustjs-linkedin与快递3项目的工作,但我似乎无法让过去这个错误:dustjs,LinkedIn与快递3

Error: Template name parameter cannot be undefined when calling dust.compile 
at Object.compiler.compile (/home/user/project/node_modules/dustjs-linkedin/lib/compiler.js:21:16) 
at Object.dust.compileFn (/home/user/project/node_modules/dustjs-linkedin/lib/dust.js:109:37) 
at Function.exports.dust.render (/home/user/project/node_modules/consolidate/lib/consolidate.js:226:56) 
at /home/user/project/node_modules/consolidate/lib/consolidate.js:146:25 
at /home/user/project/node_modules/consolidate/lib/consolidate.js:99:5 
at fs.js:266:14 
at Object.oncomplete (fs.js:107:15) 

我可以用一个全新的快递重现此3项目像这样:

app.js

var express = require('express'); 
var routes = require('./routes'); 
var user = require('./routes/user'); 
var http = require('http'); 
var path = require('path'); 

var app = express(); 

// added these 3 
var dust = require('dustjs-linkedin'); 
var cons = require('consolidate'); 
app.engine('dust', cons.dust); 


app.set('port', process.env.PORT || 3000); 
app.set('views', path.join(__dirname, 'views')); 

// added this 1 
app.set('view engine', 'dust'); 

app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.json()); 
app.use(express.urlencoded()); 
app.use(express.methodOverride()); 
app.use(express.cookieParser('your secret here')); 
app.use(express.session()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 

if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/', routes.index); 
app.get('/users', user.list); 

http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

package.js

{ 
    "name": "application-name", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "start": "node app.js" 
    }, 
    "dependencies": { 
    "express": "3.4.7", 
    "dustjs-linkedin": "*", 
    "consolidate": "*" 
    } 
} 

路线/ index.js

exports.index = function(req, res){ 
    res.render('index', { title: 'Express' }); 

的意见/ index.dust

Title: {title} 

奇怪的是,我有使用项目快递3和dustjs-linkedin这工作得很好。我跑的文件DIFF的dustjs-linkedin模块和工作版本有很多文件在dist而该项目引发错误只有几个,即:

工作/node_modules/dustjs,LinkedIn/DIST :

dust-core.js dust-core.min.js dust-full.js dust-full.min.js LICENSE 

workingProject/node_modules/dustjs-LinkedIn/DIST:

dust-core-1.1.1.js  dust-core-2.0.0.min.js dust-full-1.2.0.js  dust-full-2.0.1.js 
dust-core-1.2.0.js  dust-core-2.0.1.js  dust-full-1.2.1.js  dust-full-2.0.2.js 
dust-core-1.2.1.js  dust-core-2.0.2.js  dust-full-1.2.2.js  dust-full-2.0.3.js 
dust-core-1.2.2.js  dust-core-2.0.3.js  dust-full-1.2.2.min.js dust-full-2.1.0.js 
dust-core-1.2.2.min.js dust-core-2.1.0.js  dust-full-1.2.3.js  dust-full-2.2.0.js 
dust-core-1.2.3.js  dust-core-2.2.0.js  dust-full-1.2.3.min.js dust-full-2.2.2.js 
dust-core-1.2.3.min.js dust-core-2.2.2.js  dust-full-1.2.4.js  dust-full-2.2.2.min.js 
dust-core-1.2.4.js  dust-core-2.2.2.min.js dust-full-1.2.5.js  dust-full-2.2.3.js 
dust-core-1.2.5.js  dust-core-2.2.3.js  dust-full-1.2.6.js  dust-full-2.2.3.min.js 
dust-core-1.2.6.js  dust-core-2.2.3.min.js dust-full-2.0.0.js 
dust-core-2.0.0.js  dust-full-1.1.1.js  dust-full-2.0.0.min.js 

一个“WOR的该演示王”项目给了我同样的错误: https://github.com/chovy/express-template-demo

回答

5

[编辑]

一个问题在这里讨论:

https://github.com/linkedin/dustjs/commit/e5ebff0f7b32f8ff0883be7f7924507b314eef1d

[/node_modules/]consolidate/lib/consolidate.jsexports.dust.render功能:

... 
try { 
    var tmpl = cache(options) || cache(options, engine.compileFn(str)); 
    tmpl(options, fn); 
} catch (err) { 
    fn(err); 
} 
... 

engine.compileFn被称为发送str为参数,str实际上是模板本身:

Title: {title} 

engine.compileFn[/node_modules/]dustjs-linkedin/lib/compiler.jscompiler.compile(source, name)

source发送模板,但是name这是模板名称,应该是index在我们的情况下,从来没有(未定义)。

或者,我更喜欢使用Payapl的Adaro库express 3.xlinkedin-dustjs。这是他们的项目kraken.js的一部分,但可以作为一个独立的防尘包装快递:如README.md提到

https://github.com/paypal/adaro

var express = require('express'); 
var dustjs = require('adaro'); 

var app = express(); 

app.engine('dust', dustjs.dust({}); 
app.set('view engine', 'dust'); 

// For rendering precompiled templates: 
// app.engine('js', dustjs.js({ ...)); 
// app.set('view engine', 'js'); 
+1

+1我不知道' adaro',事实上它确实可行,但我仍然想知道为什么只有原始的'linkedin'版本会抛出这个错误。 – bqui56

+1

答案在上面编辑:) – rashad