2013-09-22 94 views
4

我一直在试图制作一个网站使用快递和玉器。我已经写了好几页和路线,到现在为止工作得很好。我不断收到以下错误:ReferenceError:玉没有定义

ReferenceError: jade is not defined 
    at eval (eval at <anonymous> ([...]project/node_modules/jade/lib/jade.js:165:30), <anonymous>:2:1) 
    at Object.exports.render ([...]project/node_modules/jade/lib/jade.js:211:10) 
    at Object.exports.renderFile ([...]project/node_modules/jade/lib/jade.js:247:18) 
    at View.exports.renderFile [as engine] ([...]project/node_modules/jade/lib/jade.js:232:21) 
    at View.render ([...]project/node_modules/express/lib/view.js:76:8) 
    at Function.app.render ([...]project/node_modules/express/lib/application.js:506:10) 
    at ServerResponse.res.render (/media/ruben/5CCAD622CAD5F7EA/Users/ruben/Google Drev/developer/workspace/kwasi/project/node_modules/express/lib/response.js:759:7) 
    at exports.home ([...]project/routes/cases.js:7:7) 
    at callbacks ([...]project/node_modules/express/lib/router/index.js:164:37) 
    at clientChosen ([...]project/app.js:81:5) 

当我清楚我的缓存和Cookie,我可以去我所有的网页,但每当我登录,即设置一个会话变量与登录的用户,我收到上面的错误。

我不确定我可以包含哪些其他信息。在该堆栈跟踪参考cases.js线仅仅是

res.render("home.jade", {}) 

编辑:

在我app.js我指定玉作为渲染引擎有以下:

app.configure(function() { 
    app.set("views", __dirname + "/views"); // Set the views folder 
    app.set("view engine", "jade"); // Set the rendering engine 
    ... 

而我的看法是这样的:

extend layout 

block title 
    title Forside - #{company} 

block content 
    h3 Sager 

    - for (var i = 0; i < cases.length; i++) { 
    .casethumb 
     p #{cases[i].label} 
    - } 

编辑2:右键 。我能够确定的是,它可能与我的定制中间件有关。我有这两个功能

// Makes sure that the user is logged in 
loggedIn = function(req, res, next){ 
    if (req.session.user) { 
    next() 
    } 
    else { 
    if (req.url != "/login") { 
     req.flash('info', "Før du kan bruge systemet, skal du logge ind") 
    } 
    res.redirect("/login") 
    } 
} 
// Makes sure that the user has chosen a client to work on 
clientChosen = function(req, res, next) { 
    if (req.session.selectedClient) { 
    next() 
    } 
    else { 
    res.redirect("/chooseClient") 
    } 
} 

我使用它们像这样:

app.get("/", loggedIn, clientChosen, cases.home) 

当我从我的路线删除功能这样

app.get("/", cases.home) 

问题就没有了,但我确实需要我的中间件的功能。我将如何去解决这个问题?

+0

我已经编辑我的问题,包括我的玉配置和问题 – Eldamir

+0

看起来这可能需要做的视图用会话变量的存储方式。我会进一步调查 – Eldamir

+0

你可以粘贴'cases.home()'代码。你的其他两个男/女对我看起来很好。 – vmx

回答

0

经过一番挖掘,我发现错误是与玉。对于我使用的玉版本,当我尝试使用require(./something)时,Jade源代码中提到了一个不存在的变量。为了解决这个问题,我编辑了在./node_modules/jade/lib/jade.js:151

一条从

if (options.client) return new Function('locals', fn) 

//if (options.client) return new Function('locals', fn) 

行似乎并没有在所有需要。没有它,一切都会像它应该那样运作Jade的github页面曾经提到过这个问题,并且我暗示了这个提示。这似乎是一个已知的问题,他们正在处理即将到来的版本。

对于任何有同样的问题,简单的评论指出一条线,你是金色的

0

另外,你能在var之前loggedIn()clientChosen()的例程定义吗?将这些定义使用它们来定义app.get('/');

var loggedIn = function (req, res, next) { // your code }; 

var clientChosen = function (req, res, next) { // your code }; 

如果你还没有使用它,可以在安装(npm install -g jshint)和运行jshint <path/to/js-file>过吗?它报告任何错误吗?

相关问题