如何处理节点,猫鼬复选框



这是一个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) {

}
}
})
})

我对网络开发还是个新手。如果需要更多信息,请询问。非常感谢。

而不是这个:

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

最新更新