ReactJS:表单向数据库发送错误的日期值

ReactJS: form sends wrong date value to database

我正在尝试使用 Reactstrap 表单将数据发送到数据库,并且所有内容都已正确发送,但日期值除外。无论我输入什么日期,都会在 MongoDB 上保存为 1970-01-01T00:00:00.000+00:00,我不知道为什么。

当我通过 Postman 发送所有内容时,它保存了正确的值,但我想从表单中提交。

表单日期字段:

<Form onSubmit={this.onSubmit}>
   <FormGroup>
      <Label className="lead">Horário local da leitura</Label>
      <Input type="text" name="hora_leitura" required />

onSubmit 函数

onSubmit = (e) => {
    e.preventDefault();

    const {
      hora_leitura, pressao_atm, temp_ar, temp_min, temp_max,
      umid_rel, umid_min, rad_solar, chuva_ac_dia, inten_vento,
      direc_vento,
    } = this.state;
    const newEntry = {
      hora_leitura, pressao_atm, temp_ar, temp_min, temp_max,
      umid_rel, umid_min, rad_solar, chuva_ac_dia, inten_vento,
      direc_vento,
    };

    // Add entry via addEntry action
    this.props.addEntry(newEntry);
  };

onChange 函数

onChange = (e) => {
  this.setState({ [e.target.name]: e.target.value });
};

POST条目API代码:

router.post("/", (req, res) => {
  const {
    hora_leitura, pressao_atm, temp_ar, temp_min, temp_max, umid_rel,
    umid_min, rad_solar, chuva_ac_dia, inten_vento, direc_vento,
  } = req.body;

  Entry.findOne({ hora_leitura }).then((isMatch) => {
    if (isMatch)
      return res
        .status(400)
        .json({ msg: "Uma entrada com essa data já existe" });
    else {
      const newEntry = new Entry({
        hora_leitura, pressao_atm, temp_ar, temp_min, temp_max, umid_rel,
        umid_min,rad_solar, chuva_ac_dia, inten_vento, direc_vento,
      });
      newEntry.save().then((entry) => res.json(entry));
    }
  });
});

不知道为什么它没有发送正确的日期。如果您能提供帮助并解释您的答案,那就太好了。

编辑:

在我的 EntryModal class 状态下,我有这个

state = {
    modal: false,
    added: false,
    hora_leitura: new Date(), 
    pressao_atm: 0,
    temp_ar: 0,
    temp_min: 0,
    temp_max: 0,
    umid_rel: 0,
    umid_min: 0,
    rad_solar: 0,
    chuva_ac_dia: 0,
    inten_vento: 0,
    direc_vento: "",
    msg: null,
  };

我在 onSubmit() 上调用 addEntry 的正上方放了一个 console.log,它显示 hora_leitura 作为发送表格的确切日期,而不是我的日期插入。我不知道我的代码是否读取了 onChange.

上的正确日期值

经过一些测试,我注意到,要更改我在状态上设置的值,我必须在元素上调用 onChange,就像我在表单上的每个输入上所做的那样,但在 <Input type="text" name="hora_leitura" required />,所以我在此输入中输入的任何值都无关紧要。

我刚刚将输入更改为:

<Input
  type="text"
  name="hora_leitura"
  placeholder="2020-06-12T09:00:00.000"
  onChange={this.onChange} // this is what was missing
  required
/>

而且效果很好。