【问题标题】:Trying to overwrite pre populated data in an input area尝试覆盖输入区域中的预填充数据
【发布时间】:2013-10-16 15:12:36
【问题描述】:

我正在尝试在 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=?关于什么是错误的以及如何解决它的任何建议?

【问题讨论】:

    标签: html node.js mongodb express pug


    【解决方案1】:

    假设您使用的是表单,请使用 req.body.username 从您的路由处理函数中访问名称为 username 的输入的 value 属性:

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

    【讨论】:

    • 确保输入是正确表单的一部分,确保没有重复的输入元素也被命名为username。添加console.log(newUsername) 以检查正确的东西是否到达路由处理程序。如果正确,那么将其写入 mongo 的代码可能存在问题;如果不正确,问题可能出在您的 html 表单中
    • 看起来是我正在做的 mongodb 更新的问题,从 req.body 传入的值看起来是正确的。
    【解决方案2】:

    答案在 mongodb update() 方面。显然,我在我的问题中遗漏了很大一部分......选择标准实际上是这样的:

    input(name='username', value='#{username}', disabled)
    

    我没有意识到disabled 字段会传入未定义的值,我只是认为它使它们无法编辑。所以 update() 没有工作,因为它在集合中找不到任何匹配的文档,因为usernameundefined。你知道他们对假设的看法!

    不过,我会把答案归功于@Plato,调查这些值的提示是让我弄清楚这一点的原因。

    【讨论】:

    • 谢谢!顺便说一句,你应该直接将变量传递给属性:input(name='username', value=username, disabled) 我个人的偏好是明确使用disabled="disabled",但我认为它只适用于disabled,因为你有它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多