浏览器中玉器服务器端传递的variables为空

我有一个奇怪的问题,那就是传递给玉的variables在浏览器中是空的,看起来传入的variables是空的,但它不是

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 }) } }; 

玉档(整体forms):

 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 

注意:除了用户名variables以外的所有内容都不起作用 我试图为这些variables(例如名称:'testing')分配一个静态值,但它也不会工作。

很难说出你要在这里完成什么,但这是一个起点。 我做的主要变化是删除了两条线

 // if true redirect res.render('new-sensor-settings', { username: req.session.username, id: 'home', brand: brand }) 

因为那些在db.collection.findOne的callback之前被执行,因此阻止了在调用内部res.render时发送的响应。 我只是猜测,这些线是无关的,也许是从以前的函数迭代剩余。 如果它们不是偶然的,请提供有关该function应该执行的更多信息。

我做的其他小改动:

重新缩小到2个空格。

我在if(!req.query.sid)语句中添加了大括号。 (没有大括号的单行if语句没有问题,但是可维护性较差,所以我个人偏好总是添加它们。)

我在发送回复的语句前添加了return 。 由于res.redirectres.render语句全部放置在各自的if块的末尾,因此不再有任何两个执行的机会。 所以这里的return并不是非常必要的 – 这只是我个人偏好的使用方式,明确的是现在已经发送了响应,在这个路由中不应该执行进一步的代码。

if(!result)到附加到前一个if(result)的else块中,

 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'); }; }); } }; 

试试这个符号#{ipaddress} ,每次都适合我