当我没有选择任何东西时,为什么我从表单下拉列表中得到的是 Undefined 而不是 Null?

Why am I getting Undefined instead of Null from a Form drop down list when I haven't selected anything?

所以,我有一个基本页面,我在其中从我的数据库中的集合中找到()数据,并使用 Node.js、express、MongoDB 和 ejs 创建它。我创建了一个表单,以便我可以从呈现的 table 中过滤数据并将其作为过滤器发送到 mongoDb。该表单包含 3 种输入类型、2 种文本类型和 1 个下拉菜单以及一个提交按钮。

我的问题出在下拉菜单上。当我 select 下拉列表中的一个值并提交时,我得到了过滤后的结果。但是每当我保留下拉列表并填充任何其他输入字段以仅使用那些进行过滤时,我不会取回任何数据。

这是我的下拉代码:

<div class="col-lg-12">
  <select class="form-control" name="searchDept">
      <option selected disabled value="">Choose Department</option>
      <option value="Computer Science Engineering">Computer Science Engineering</option>
      <option value="Information Science Engineering">Information Science Engineering</option>
      <option value="Electrical & Electronics Engineering">Electrical & Electronics Engineering</option>
      <option value="Electronics and Communication Engineering">Electronics and Communication Engineering</option>
      <option value="Mechanical Engineering">Mechanical Engineering</option>
      <option value="Civil Engineering">Civil Engineering</option>
      <option value="Main Office">Main Office</option>
      <option value="Admission Office">Admission Office</option>
      <option value="Principal Office">Principal Office</option>
  </select>
</div>

在我的 app.js 文件中,这是我的获取方法:

    const searchName = req.body.searchName;
    const searchPhone = req.body.searchPhone;
    const searchDept = req.body.searchDept;

    if (searchName != "" && searchPhone != "" && searchDept != "") {
        
        var searchParameter = { $and: [{visitorName : searchName}, { $and: [{phone : searchPhone}, {deptOfVisit : searchDept}]}]}

    } else if (searchName != "" && searchPhone == "" && searchDept != "") {
        
        var searchParameter = { $and: [{visitorName : searchName}, {deptOfVisit : searchDept}]}

    } else if (searchName == "" && searchPhone != "" && searchDept != "") {
        
        var searchParameter = { $and: [{phone : searchPhone}, {deptOfVisit : searchDept}]}

    } else if (searchName != "" && searchPhone != "" && searchDept == "") {
        
        var searchParameter = { $and: [{visitorName : searchName}, {phone : searchPhone}]}

    } else if (searchName != "" && searchPhone == "" && searchDept == "") {
        
        var searchParameter =  {visitorName : searchName}

    } else if (searchName == "" && searchPhone == "" && searchDept != "") {

        var searchParameter =  {deptOfVisit : searchDept}
        
    } else if (searchName == "" && searchPhone != "" && searchDept == "") {

        var searchParameter =  {phone : searchPhone}
        
    } else {
        
        var searchParameter = {}

    }

    console.log(searchName);
    console.log(searchPhone);
    console.log(searchDept);
    console.log(searchParameter);

    var visitorSearch = Visitor.find(searchParameter);

当我 select 列表中的其中一个选项并且我能够找到正确的数据并呈现它时,一切正常。但是,如果我在没有 selecting 任何东西的情况下离开下拉列表,我将得不到任何记录。

所以我尝试了控制台记录所有内容,当我这样做时,我意识到它正在传递一个“未定义”值而不是 null 并且正在进入第一个 if 语句而不是它应该为 null 的语句。

Test
12345
undefined
{ '$and': [ { visitorName: 'Test' }, { '$and': [Array] } ] }

我做错了什么,我应该怎么做?

我还没有真正找到答案,但我找到了解决方法。我将第二个选项指定为 Selected,因为无需 select 即可正常工作,并将“选择部门”选项更改为“None”。正如@GarrGodfrey 在评论中所说,req.body 开始改变。如果我不更改它,我不知道它如何与第二个选项一起使用,但无论如何,如果我不想按部门搜索,我单击下拉菜单和 select None 其值为 "" 或 null .搜索完美进行。