我使用express使用默认的视图引擎jade设置了一个基本的node.js web-app。
当用户首次加载页面时,会发生以下情况
app.get('/', function(req, res){
res.render('index', {
title: 'Test',
mode: "user"
});
});
我无法解决的是如何更改我最初从ajax调用传递到jade模板的参数。
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"
// });
});
如果有人有这方面的工作经验,我们将不胜感激。
答案 0 :(得分:4)
我不确定你在追求什么,但是如果它用AJAX调用的结果更新页面(不刷新或以其他方式重新加载页面)那么你将不得不使用客户端JavaScript 。 jQuery的load()或post()应该能够处理它。
或者,如果您没有使用AJAX,而是执行普通表单提交,那么您有几个选择。一,您可以保留重定向并使用Express / Connect的Sessions系统来确定用于获取请求的内容,或者两个可以将重定向替换为index.jade页面的另一个res.render并包含你想要改变的变量。
应该理解,在其中任何一个发生后,node.js放弃对浏览器的网页控制,除非你专门设置通信架构。 node.js中目前没有控件可以强制更新或页面更改到客户端。除了通过套接字连接或除非客户端本身进行其他轮询(例如在第一个涉及jQuery的示例中)。
答案 1 :(得分:1)
假设您要显示同一页面,使用其他“模式”
// 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
});
});
答案 2 :(得分:0)
您可以使用类似下面的内容,或者如果您想使用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
});