2013-09-22 3 views
4

Я пытался создать сайт, используя экспресс и нефрит. Я сделал несколько страниц и маршрутов, и до сих пор он работал нормально. Я получаю следующее сообщение об ошибке: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) 

Когда я очистить кэш и куки, я могу пойти на все мои страницы, но всякий раз, когда я войти, то есть установить переменную сеанса с вошедшего пользователя, Я получаю вышеуказанную ошибку.

Я не уверен, какую другую информацию я могу включить. Линия в cases.js, что стек трассировки ссылающихся просто

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

EDIT:

В моих 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} 
    - } 

EDIT 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()'. Ваши другие два m/ws выглядят хорошо для меня. – vmx

ответ

0

После некоторого рытья я узнал, что ошибка связана с нефритом. С версией jade, которую я использую, когда я пытаюсь использовать 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) 

линия, кажется, не будет нужен. Все работает без него. Проблема была упомянута на странице github Jade в одно время, и я gav ethem намек. Это была известная проблема, с которой они имеют дело в предстоящей версии.

Для тех, кто с той же проблемой, просто закомментируйте, что одна линия, и вы золотой

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>? Сообщает ли он о каких-либо ошибках?

Смежные вопросы