Node Express Jade - Checkbox boolean value

时间秒杀一切 提交于 2020-01-14 14:33:31

问题


I'm using Node+Express+Jade to render some webpages. On a form there are 2 checkboxes. When the form is submitted through POST, if the checkbox is checked, I get req.body.checkbox1 -> 'on', if isn't checked, I get req.body.checkbox1 -> undefined

Is possible to get checkbox value as true or false ?

Here's my server side test code

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

And my Jade form test

form(action='/config', method='post')
    input(type="checkbox", name="not_checked", checked=false)
    input(type="checkbox", name="checked", checked=true)
    input(type='submit')

回答1:


Can you try the following jade form

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')

The value will be string, so you have to parse it. If the checkbox does not have checked attribute then it would not be included in the post request body. So in the above form, only the checked checkbox will be sent see below.

req.body : {"checked":"true"}

If you tick both checkboxes then both values will be sent as below

req.body : {"not_checked":"false","checked":"true"}

You can also add validation against undefined, whenever no checkbox is ticked

   if(req.body.not_checked) {
      console.log('not checked : ' + req.body.not_checked);
    }

    if(req.body.checked) {
      console.log('checked : ' + req.body.checked);
    }



回答2:


I was working through this recently for a project...

Here is the form :

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")

then in the node javascript they can be found through the req.body.name of each. req.body.name will return 'on' if one of the boxes if checked. if a box is not checked, they are undefined. so a ternary statement can be used to create a new object and save them to a db as a boolean value.

object = {
    first: req.body.1 ? true : false,
    second: req.body.2 ? true : false,
    third: req.body.3 ? true : false
};

Hope this helps anyone else coming along. I was happy once I figured it out




回答3:


I have meet this problem today and I have a solution more clean (for me):

function(req, res){
   req.body.field = Boolean(req.body.field)
}



回答4:


If your default value is false then this solution seems the most straight-forward to me. First set a default with your DB/ORM. I'm using Mongoose so in the model file it's:

published: { type: Boolean, default: false },

Then in the form input element set the value to true:

<input type="checkbox" name="published" id="published" value=true>
<label for="published">Publish</label>

By unchecking it you'll submit an empty value which defaults back to false.



来源:https://stackoverflow.com/questions/32203418/node-express-jade-checkbox-boolean-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!