Node Express Jade - Checkbox布尔值

时间:2015-08-25 11:58:33

标签: node.js express checkbox boolean pug

我使用Node + Express + Jade渲染一些网页。在表单上有2个复选框。当表单通过POST提交时,如果选中该复选框,则会收到req.body.checkbox1 -> 'on',如果未选中,则会收到req.body.checkbox1 -> undefined

可以将复选框值设为truefalse吗?

这是我的服务器端测试代码

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

6 个答案:

答案 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 
});