Как обновить шаблон Jade из сообщения ajax?

Я настроил базовое веб-приложение node.js, используя экспресс с движком просмотра по умолчанию jade.

Когда пользователь впервые загружает страницу, происходит следующее

app.get('/', function(req, res){
    res.render('index', {
        title: 'Test',
        mode: "user"
    });
});

Чего я не могу понять, так это того, как изменить параметр, который я изначально передал в нефритовый шаблон из вызова ajax.

app.post('/', function(req, res){
    console.log(req.body.list);
    res.redirect('back');
    // I imagine the code needs to go here and look somewhat like the following
    // 
    // res.?update-view({
    //  mode: "admin"
    // });
});

Если у кого-то был опыт работы с этой работой, ваш вклад будет оценен.


person Luke    schedule 10.03.2011    source источник
comment
Чего именно вы пытаетесь достичь? Единственное решение, которое я вижу, это обновление графического интерфейса с использованием кода на стороне клиента (с данными, полученными из вашего экспресс-обработчика сообщений)   -  person schaermu    schedule 11.03.2011


Ответы (3)


Я не совсем уверен, что вам нужно, но если это обновление страницы с результатами вызова AJAX (который не обновляет или иным образом не перезагружает страницу), вам придется использовать клиентский JavaScript. load() jQuery или post() должен справиться с этим.

В качестве альтернативы, если вы не используете AJAX, а вместо этого выполняете обычную отправку формы, у вас есть несколько вариантов. Во-первых, вы можете оставить свое перенаправление и использовать систему Sessions Express/Connect, чтобы определить, что используется для запроса на получение, или два, вы можете заменить перенаправление другим res.render страницы index.jade и включить переменную, которую хотите изменить.

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

person Zikes    schedule 15.03.2011

Предполагая, что вы хотите отобразить ту же страницу с другим «режимом»

// set the page title for all requests
app.locals({ title: 'Test' });

// GET request
app.get('/', function(req, res){
  res.render('index', {
    // displays the default "user" mode
    mode: 'user'
  });
});

// when POST is submited
app.post('/', function(req, res){
  // this is the param given by the user
  console.log(req.body.list);

  // now render the same page
  res.render('index', {
    // with mode set to the the given parameter
    mode: req.body.list
  });
});
person laconbass    schedule 19.04.2013

Вы можете использовать что-то вроде следующего, или если вы хотите использовать вызов AJAX, используйте jQuery ajax, пока есть ответ

Клиент

script(type="text/javascript")
  $(document).ready(function(){
    //...AJAX here....
    var newValue = #{value} + 10;
  });

Сервер

app.get('/ajax', function(req, res){
 //This is where your code and response go
});
person Jack    schedule 13.09.2011