我使用Node + Express + Jade渲染一些网页。在表单上有2个复选框。当表单通过POST提交时,如果选中该复选框,则会收到req.body.checkbox1 -> 'on'
,如果未选中,则会收到req.body.checkbox1 -> undefined
可以将复选框值设为true
或false
吗?
这是我的服务器端测试代码
var bodyParser = require('body-parser');
var express = require('express');
var app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + '/webroot'));
app.set('views', __dirname + '/view');
app.set('view engine', 'jade');
app.listen(3001);
app.get('/', function (req, res) {
res.render('test');
});
app.post('/config', function (req, res) {
console.log(req.body.t);
console.log(req.body.f);
res.redirect('/');
});
我的玉石表格测试
form(action='/config', method='post')
input(type="checkbox", name="not_checked", checked=false)
input(type="checkbox", name="checked", checked=true)
input(type='submit')
答案 0 :(得分:7)
我最近正在研究这个项目......
以下是表格:
form(action='/survey/submission/test/config', method='post')
input(type="checkbox", name="1")
input(type="checkbox", name="2")
input(type="checkbox", name="3")
input(type="submit")
然后在节点javascript中,可以通过每个的req.body.name找到它们。 req.body.name将返回' on'如果其中一个盒子被检查。如果未选中框,则它们未定义。 所以可以使用三元语句创建一个新对象,并将它们作为布尔值保存到db。
object = {
first: req.body.1 ? true : false,
second: req.body.2 ? true : false,
third: req.body.3 ? true : false
};
希望这可以帮助其他人。一旦我弄清楚,我很高兴
答案 1 :(得分:2)
我今天遇到了这个问题,我有一个更干净的解决方案(对我来说):
function(req, res){
req.body.field = Boolean(req.body.field)
}
答案 2 :(得分:1)
您可以尝试以下玉石形式
form(action='/survey/submission/test/config', method='post')
input(type="checkbox", name="not_checked", value="false")
input(type="checkbox", name="checked", checked, value="true")
input(type='submit')
值为string,因此您必须解析它。如果复选框没有checked属性,则它不会包含在post请求体中。因此,在上面的表格中,只会选中已选中的复选框,如下所示。
req.body : {"checked":"true"}
如果勾选两个复选框,则两个值将按以下方式发送
req.body : {"not_checked":"false","checked":"true"}
只要没有勾选复选框,您也可以针对未定义添加验证
if(req.body.not_checked) {
console.log('not checked : ' + req.body.not_checked);
}
if(req.body.checked) {
console.log('checked : ' + req.body.checked);
}
答案 3 :(得分:0)
如果您的默认值为false,那么此解决方案对我来说似乎是最直接的。 首先为您的DB / ORM设置一个默认值。 我正在使用猫鼬,因此在模型文件中是:
published: { type: Boolean, default: false },
然后在表单输入元素中将值设置为true:
<input type="checkbox" name="published" id="published" value=true>
<label for="published">Publish</label>
通过取消选中它,您将提交一个空值,默认为false。
答案 4 :(得分:0)
我解决了这个问题。首先,我只想说我在NodeJS上使用ExpressJS的jade / pug模板引擎(+ bootstrap 4.1)。
div.form-group.form-check
if customer.status
input#checkbox.form-check-input(type="checkbox" name="status" value="true" checked)
else
input#checkbox.form-check-input(type="checkbox" name="status" value="false")
NodeJS-customer.js
// Update: Update a customer that given id
router.post('/update/:id', (req, res, next) => {
const customerId = req.params.id;
// let { name, email, city, country, status } = req.body;
// Convert value to Boolean
req.body.status = Boolean(req.body.status);
console.log(req.body); // true | false
Customer.updateOne({ _id: customerId }, req.body).then( /* ... */)
}
html,玉石或哈巴狗文件
<input type="checkbox" name="status" value="false" checked>
NodeJS Javascript文件
app.post('/update/:id', (req, res, next) => {
// Firstly, we can try it
console.log(req.body.status); // Output: undefined
// Then we should convert this value to Boolean
req.body.status = Boolean(req.body.status);
console.log(req.body.status) // Output: false or true
}
希望我的解决方案对您有帮助
答案 5 :(得分:0)
<form>
<input type="checkbox" name="imp" value=false>
</form>
let impMarks ; //
app.post("/", function(req, res) {
impMarks = Boolean(req.body.imp);
console.log(**impMark**); // the output will be true(if checked) / false
});