我正在尝试在Jade文件中显示一个输入区域,其中预先填充的数据是从存储在mongodb会话存储中的会话信息中收集的。 Web应用程序构建在Express for node.js上。我的Jade文件在输入区域(预先填充了会话数据)中看起来像这样:
input(name='username', value='#{username}')
因此输入区域显示存储在会话中的正确用户名。然后,我希望用户能够编辑该字段并根据需要提交新用户名。我的mongodb update()看起来像这样:
uname = request.body.username;
targetcol.update({username: req.session.username, password: req.session.password}, {username: uname});
然而,一旦提交,相关配置文件的mongodb集合中的文档没有被更新,它保持与预先填充的相同的值。我想知道这是因为我在Jade文件中将其指定为value=
吗?关于什么是错的以及如何解决它的任何建议?
答案 0 :(得分:1)
假设您正在使用表单,请使用value
从路由处理函数访问名为username
的输入的req.body.username
属性:
app.use(express.bodyParser());
app.post('/form', function(req, res){
var newUsername = req.body.username;
targetcol.update({ username: req.session.uname, password: req.session.password}
, {username: newUsername});
res.redirect('/');
});
答案 1 :(得分:1)
答案是在mongodb update()方面。我明显地从问题中留下了很大的一部分......选择标准实际上就是这样:
input(name='username', value='#{username}', disabled)
我没有意识到disabled
字段会传递未定义的值,我只是认为它使它们不可编辑。因此,update()无效,因为它无法在集合中找到任何匹配的文档,因为username
是undefined
。你知道他们对假设的看法!
我会相信你@Plato的答案,调查价值观的暗示是让我想出这一点。