Node Express Jade - Checkbox boolean value

后端 未结 5 536
青春惊慌失措
青春惊慌失措 2021-01-19 01:55

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.

相关标签:
5条回答
  • 2021-01-19 02:32

    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)
    }
    
    0 讨论(0)
  • 2021-01-19 02:35

    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);
        }
    
    0 讨论(0)
  • 2021-01-19 02:36

    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

    0 讨论(0)
  • 2021-01-19 02:41

    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.

    0 讨论(0)
  • 2021-01-19 02:44

    I solved this problem. Firstly I just want to say that I use jade/pug template engine (+bootstrap 4.1) with ExpressJS on NodeJS.

    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( /* ... */)
    
    }
    

    Another Simple Example:

    html, jade or pug file

    <input type="checkbox" name="status" value="false" checked>
    

    NodeJS Javascript file

    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
    }
    

    I hope my solutions help you

    0 讨论(0)
提交回复
热议问题