【问题标题】:How to handle checkbox with node, mongoose如何使用节点处理复选框,猫鼬
【发布时间】:2020-11-10 12:53:27
【问题描述】:

这是ejs文件,其表单包含多个复选框输入,通过循环访问数据库。并发送一个post请求,然后由app.post处理

    <form action="/" method="post">
    <% users.forEach(function(user) { %>
                  <tr>
                    <td style="text-align: center;">
                      <input type="checkbox" value="<%= user.username %>" name="username">
                    </td>
                  </tr>
    <% }) %>
    </form>

因此,当用户仅选中一个复选框时,可以通过 app.post() 上的此复选框进行处理:

    users = req.body.username
        if (typeof users == 'string') {
            User.findOne({"username":users}, function(err, foundUser) {
                if(err) {console.log(err)}
                else {
                    if (foundUser) {
                        res.render("queuedUsers", {users: foundUser})
                    }
                }
            })

但如果用户选中多个复选框,则返回一个列表。但我不能多次循环列表和res.render,因为它会抛出一个已经发送的标头错误。这个怎么处理?

    else {
        users.forEach(function(user) {
            User.findOne({"username":user}, function(err, foundUser) {
                if(err) {console.log(err)}
                else {
                    if(foundUser) {
                        
                    }
                }
            })
        })

我还是网络开发的新手。如果需要更多信息,请询问。谢谢。

【问题讨论】:

    标签: javascript node.js forms post mongoose


    【解决方案1】:

    而不是这个:

    users = req.body.username
    if (typeof users == 'string') {
        User.findOne({ "username": users }, function(err, foundUser) {
            if (err) { console.log(err) } else {
                if (foundUser) {
                    res.render("queuedUsers", { users: foundUser })
                }
            }
        })
    } else {
        users.forEach(function(user) {
            User.findOne({ "username": user }, function(err, foundUser) {
                if (err) { console.log(err) } else {
                    if (foundUser) {}
                }
            })
        })
    }
    

    使用这个:

    // if users is string make it an array
    if (typeof users == 'string')
        users = [users];
    
    // then you only need a single User.find and no if/else statement
    // use $in operator to find all users in one query
    User.find({"username": { $in: users }}, function(err, foundUsers) {
        if(err) // render error page
            return res.render('500');
    
        res.render("queuedUsers", { users: foundUsers || [] });
    })
    

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 2017-06-03
      • 2018-11-24
      • 1970-01-01
      • 2017-12-11
      • 2019-10-26
      • 2012-07-30
      • 2020-06-03
      • 2016-05-31
      相关资源
      最近更新 更多