2015-12-11 2 views
1

Я новичок, чтобы выразить узел, и я несу ответственность за интерфейс веб-приложения. Мне нужно, чтобы пользователь нажал ссылку и для этой ссылки, когда переменная пресса переходила к index.js, эта ссылка позволяет пользователю выбрать, какую категорию вопроса они хотят протестировать. Я не думаю, что лучший вариант для каждой категории. но поскольку я новичок, я не уверен, что делать.Как создать переменную в jade, которая будет использоваться в node.js

Вот код моей ссылки в jade (я хочу добавить что-то здесь, чтобы сделать то, что хочу) есть ссылка на скриншот страницы внизу этого сообщения.

   li.active 
       a(href='freeplay') 
        i.fa.fa-edit 
        span.nav-label Freeplay 
        span.fa.arrow 
       ul.nav.nav-second-level 
        li 
         a(href='freeplay/category') Category1 
        li 
         a(href='freeplay/category') Category2 
        li 
         a(href='freeplay/category') Category3 
        li 
         a(href='freeplay/category') Category4 
        li 
         a(href='freeplay/category') Category5 

и вот мой index.js, который обрабатывает его. temp - это переменная, в которой я хочу сохранить строку категории.

//Handle the free play request 
router.get('/freeplay' , isAuthenticated, freeplay.startFreePlay); 

//Handle the free play request with category 
router.get('/freeplay/category' , isAuthenticated, freeplay.startCategoryPlay); 

и, наконец, Node.js, что я хочу, чтобы иметь возможность прочитать переменную, чтобы темп является переменной я хочу назначить выбранной пользователем категории до.

exports.startFreePlay = function(req, res) { 

//grab a question that the user has not gotten right 
//Get the users logged in id 
userId = req.session.passport.user; 


freePlayLogic.getQuestion(userId, function(question){ 


    res.render("FreePlayQuestion", { question: question , questionID : question._id.toString()}); 
}) 

//Pass the question to render 

}; 

exports.startCategoryPlay = function(req, res){ 
//grab a question that the user has not gotten right 
//Get the users logged in id 
userId = req.session.passport.user; 

/** 
* get a question from category "temp" 
*/ 
freePlayLogic.getQuestionFromCategory(userId, "temp", function(question){ 

    res.render("FreePlayQuestion", { question: question , questionID : question._id.toString()}); 
}) 
} 

Заранее благодарим за помощь!

here is a screenshot of the web app with the category choices

+0

Я не думаю, что вы действительно понимаете, что нефрит делает. Джейд - всего лишь шаблонный язык. Это не интерфейсная система. Вы не можете передать переменную из нефрита на ваш сервер узла. У вас должна быть логика на стороне клиента, например javascript (сторона браузера), чтобы отправить значение nodejs. – tsturzl

+0

ok Я бы с удовольствием учился. Что я могу/должен изучать? Мой опыт в основном связан с c и сборкой, и я недавно изучил Java в этом семестре в своем инженерном классе. Это первый раз, когда я имел дело с javascript. –

+0

Думаю, я не знаю, что вы пытаетесь сделать. Не помешало бы сделать несколько учебников по стеку MEAN, чтобы вы могли понять, как управлять состоянием между сервером и клиентом, отправлять данные туда и обратно и понимать, что такое логика сервера и какова логика клиента. – tsturzl

ответ

1

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

app.get('/question/:id', function(req, res) { 
    var id = req.params.id; 
    //do something with this id like render a page 
); 

И тогда ваши ссылки будут выглядеть примерно так

a(href="/question/1") Question 1 
a(href="/question/2") Question 2 

Это должно работать, если у вас есть какие-либо вопросы, просто оставить комментарий :)

Попробуйте добавить этот тест маршрут

app.get('/test/id', function(req, res) { 
    res.send(req.params.id); 
); 
+0

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

+0

Это только добавление одного маршрута, который работает для всех нажатий кнопок –

+0

oh ... так что тогда я могу назначить строку переменной на основе числа, используя какой-то оператор if? или я могу передать строку напрямую .... Большое спасибо за ответ –

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