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

Posted

技术标签:

【中文标题】ReactJS:表单向数据库发送错误的日期值【英文标题】:ReactJS: form sends wrong date value to database 【发布时间】:2020-10-21 07:37:28 【问题描述】:

我正在尝试使用 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 班级状态中,我有这个

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 上的正确日期值。

【问题讨论】:

您如何在该州保存您的日期,或者您如何选择更准确? @Slavian 首先我在状态中设置了 date: 0,然后它应该在与表单相同的类中的 onChange 方法上通过this.setState( [e.target.name]: e.target.value ); 更新为新值。 【参考方案1】:

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

我只是将输入更改为:

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

而且效果很好。

【讨论】:

以上是关于ReactJS:表单向数据库发送错误的日期值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ReactJS 中的单个函数处理表单字段中的错误?

php表单未将日期发送到数据库SQL

反应 js:axios 向 node.js api 发布请求

Laravel PATCH 请求不读取 Axios 表单数据

Laravel:通过无表单的 AJAX 向控制器发送数据

在 ReactJS 中将表单数据提交到表中