我有一个奇怪的问题,就是传递给jade的变量在浏览器中是空的, 似乎传递的变量为null但它不是
nodejs代码(整个路由代码):
exports.sensorsettings = function(req, res){
if (!req.session.username) {
// if false render
res.render('login', { logo: 'img/owl.png', id: 'home', brand: brand })
} else {
if(!req.query.sid) (res.redirect('/dashboard'));
// get sid information from database
db.collection('sensors').findOne({sid:req.query.sid}, function(err, result) {
console.log('this is result:' + result);
if (result) {
console.log('this is result:' + result.name);
result= JSON.stringify(result);
res.render('new-sensor-settings', { username: req.session.username, name:result.name,
ipaddress: result.ipaddress, desc: result.desc, snmpcom: result.snmpcom, snmpver: result.snmpver,
snmpport: result.snmpport, snmpifindex: result.snmpifindex, ncusername: result.ncusername,
ncport: result.ncport})
};
if (!result) res.redirect('/errors?err=db');
});
// if true redirect
res.render('new-sensor-settings', { username: req.session.username, id: 'home', brand: brand })
}
};
玉文件(整个表格):
form.form-horizontal
.tab-content(style='padding: 0;')
#account-details.tab-pane
.row-fluid
.span6
.control-group
label.control-label Community
.controls
input#s_snmpcom.span10(type='text', value=snmpcom)
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Specify your device Public Community name (For SNMP version 2c)')
i
.control-group
label.control-label Port Number
.controls
input#s_snmpport.input-mini(type='text', value=snmpport)
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Specify your device SNMP port number, Default number is 161 ')
i
.span6
.control-group
label.control-label Version
.controls
select#s_snmpver.selectpicker.span6(data-style='btn-default', style='display: none;')
option 1
option 2c
option 3
.control-group
label.control-label IfIndex
.controls
input#s_snmpif.input-mini(type='text', value=snmpifindex)
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Specify your SNMP interface index number.it could be found at interface details of your device')
i
hr.separator.bottom
.row-fluid
.span6
.control-group
label.control-label Username
.controls
input#s_ncuser.span10(type='text', value=ncusername)
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Specify your device Netconf username, it could be on of defined username on your device with readonly access.')
i
.control-group
label.control-label Port Number
.controls
input#s_ncport.input-mini(type='text', value=ncport)
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Specify your device ssh port number, Default number is 22 ')
i
.span6
.control-group
label.control-label password
.controls
input#s_ncpass.span10(type='password', value='')
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Enter the password of Netconf username')
i
.form-actions(style='margin: 0;')
button.btn.btn-icon.btn-primary.glyphicons.circle_ok.pull-right(type='submit')
i
| Save changes
button.btn.btn-icon.btn-default.glyphicons.circle_remove.pull-right(type='button')
i
| Cancel
#account-settings.tab-pane.active
.row-fluid
.span3
strong Sensor General Settings
p.muted Configure Sensor basic settings here,all fields are required.
.span9
label(for='s_name') Name
input#s_name.span10(type='text', value=name)
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Give your sensor a name so you could call it!')
i
.separator
label(for='s_ip') IP Address
input#s_ip.span10(type='text', value=ipaddress , placeholder='' )
span.btn-action.single.glyphicons.circle_question_mark(style='margin: 0;', data-toggle='tooltip', data-placement='top', data-original-title='Enter sensor IP address here')
i
.separator
label(for='s_offline') Sensor Offline
input#inputPasswordNew.span12(type='text', value='', placeholder='if your sensor is down for maintenance, change its status to offline')
.separator
label(for='s_description') Description
input#s_description.span12(type='text', value=desc)
.separator
.form-actions(style='margin: 0; padding-right: 0;')
button.btn.btn-icon.btn-primary.glyphicons.circle_ok.pull-right(type='submit')
i
| Save changes
注意:除了username变量之外的所有内容都不起作用。我试图为这些变量分配一个静态值(例如名称:'test'),但它既不起作用。
答案 0 :(得分:2)
很难说你要在这里完成什么,但这是一个开始 点。我做的主要改变是删除两行
// if true redirect
res.render('new-sensor-settings', { username: req.session.username, id: 'home', brand: brand })
因为那些是在回调之前执行的
db.collection.findOne
,因此阻止了在发送时发送的响应
内部res.render
被召唤。我只是猜测这些线是
无关的,也许是前一次函数迭代的剩余。如果
它们不是偶然的,请提供更多关于功能的信息
应该这样做。
我做的其他小改动:
重新缩进到2个空格。
我在if(!req.query.sid)
语句周围添加了大括号。 (这很好
有一行if
语句没有大括号,但它更少
可维护,所以我个人的偏好是总是添加它们。)
我在发送回复的语句前添加了return
。自从
res.redirect
和res.render
语句都放在他们的最后
相应的if
块,不再有两个块执行的机会。
所以这里的return
并不是非常必要的 - 这只是我个人的
偏好使用它们,明确表示现在响应已经存在
已发送,此路由不应再执行任何代码。
我将if(!result)
移动到附加到上一个if(result)
exports.sensorsettings = function(req, res){
if (!req.session.username) {
// if false render
return res.render('login', { logo: 'img/owl.png', id: 'home', brand: brand })
} else {
if(!req.query.sid){ (return res.redirect('/dashboard')); }
// get sid information from database
db.collection('sensors').findOne({sid:req.query.sid}, function(err, result) {
console.log('this is result:' + result);
if (result) {
console.log('this is result:' + result.name);
// Problem here too:
result= JSON.stringify(result);
// result is now a string, trying to access properties will be undefined
return res.render('new-sensor-settings', { username: req.session.username, name:result.name,
ipaddress: result.ipaddress, desc: result.desc, snmpcom: result.snmpcom, snmpver: result.snmpver,
snmpport: result.snmpport, snmpifindex: result.snmpifindex, ncusername: result.ncusername,
ncport: result.ncport})
} else {
return res.redirect('/errors?err=db');
};
});
}
};
答案 1 :(得分:-2)
试试这个符号#{ipaddress}
,每次都适合我