2014-01-19 26 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