2013-09-22 8 views
4

나는 express와 jade를 사용하여 웹 사이트를 만들려고 노력해 왔습니다. 나는 여러 페이지와 경로를 만들었고 지금까지는 잘 돌아갔다. 나는 내 캐시와 쿠키를 삭제하면ReferenceError : jade가 정의되지 않았습니다.

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) 

, 내 모든 페이지에 갈 수 있지만, 내가 로그인 할 때마다, 즉, 로그인 한 사용자와 세션 변수를 설정한다 : 나는 다음과 같은 오류가 계속 위의 오류가 발생합니다.

내가 포함 할 수있는 다른 정보가 확실하지 않습니다. 내 app.js에서

나는 다음과 같이 렌더링 엔진으로 옥을 지정합니다 :

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

스택 추적을 참조하는 cases.js의 행은 단순히

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

EDIT입니다 내보기는 다음과 같습니다

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) 

처럼 내 경로에서 기능을 제거 할 수 있지만 I 때 내 미들웨어의 기능이 필요합니다. 어떻게 해결할 수 있을까요?

+0

내 옥 구성 및해야 할 수 있습니다 것 같아 질문 – Eldamir

+0

에서보기를 포함하는 내 질문을 편집 한 세션 변수가 저장되는 방식. 추가로 조사하겠습니다. – Eldamir

+0

cases.home() 코드를 붙여 넣을 수 있습니까? 다른 두 개의 시계는 나에게 잘 어울립니다. – vmx

답변

0

주위를 파고 들다 보니 오류가 옥과 함께 있다고 알았습니다. jade 버전을 사용하면 require(./something)을 시도 할 때 비어있는 변수가 Jade 소스 코드에서 참조됩니다. 이 문제를 해결하려면, 난 전혀 필요하지 않는 것

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

라인에

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

에서 ./node_modules/jade/lib/jade.js:151

에서 한 줄을 편집했다. 그것 없이는 모든 것이 작동합니다. 이 문제는 Jade의 github 페이지에서 한 번 언급되었으며, 나는 힌트를 들었다. 그것은 알려진 문제로 보였으며, 그들은 곧 나오는 버전에서 다루고 있습니다.동일한 문제를 가진 사람, 간단한 코멘트 밖으로 그 한 줄 들어

, 당신은 황금있어

0

varloggedIn()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>을 실행하는 데 사용하기 전에 이러한 정의를 배치? 오류를보고합니까?

관련 문제