Perché router.post () non assegna alcun valore a MongoDB?

Aug 23 2020

Sto lavorando su una piccola app timer ma mi sono bloccato con una parte in cui router.post () deve assegnare un valore a MongoDB. Il punto è che i dati in MongoDB vengono creati ogni volta che l'utente preme il pulsante di pausa ma senza valori da Schema Module ... C'è solo ID, createdAt e updatedAt coz del timestamp dalla classe Module. Ho provato a eseguire il debug di router.post () semplicemente aggiungendo console.log ():

router.post('/savetasks',  function(req, res) {
console.log(req.body);
// my logic.....
}

Il risultato è stato un array vuoto :( Ora presumo che forse il problema sia nella configurazione del mio modulo ... O nel modo di sottoscrivere / trasmettere i dati.

metodo router.post ()

router.post('/savetasks', async (req, res) => {
console.log(req.body);
const { startTime, endTime, elapsedTime } = req.body;
const newTime = new Time({startTime, endTime, elapsedTime});
await newTime.save();

const token = jwt.sign({ _id: newTime._id}, 'secretkey');

res.status(200).json({token}); 

});

Classe Time.js

const { Schema, model } = require('mongoose');

const timeSchema = new Schema({
  startTime: String,
  endTime: String,
  elapsedTime: String
 }, {
 timestamps: true
 });

module.exports = model('Time', timeSchema);

HttpClient

postTasks(times) {
return this.httpClient.post(this.URL + '/savetasks', times);
}

Il modo in cui mi iscrivo ... viene chiamato dal metodo pauseTimer ()

pauseTimer() {
clearInterval(this.interval);

this.endTime = new Date();
console.log(this.endTime);

this.elapsedTime = this.endTime - this.startTime
console.log(this.elapsedTime);

this.tasksService.postTasks(this.time)
  .subscribe(
    res => {
      this.time = res;
      //this.elapsed = res;
      console.log(this.time);
    },
    err => console.log(err)
  );
 }

Risposte

1 KunalMukherjee Aug 23 2020 at 20:52

I dati che stavi inviando all'API back-end non erano corretti, poiché ti aspettavi un oggetto con 3 proprietà - startTime, endTimee elapsedTime.

Correggi il codice del servizio su -

pauseTimer() {
    clearInterval(this.interval);

    this.endTime = new Date();
    console.log(this.endTime);

    this.elapsedTime = this.endTime - this.startTime
    console.log(this.elapsedTime);

    const requestBody = {
        startTime: this.startTime,
        endTime: this.endTime,
        elapsedTime: this.elapsedTime
    };
    
    this.tasksService.postTasks(requestBody)
      .subscribe(
        res => {
          this.time = res;
          //this.elapsed = res;
          console.log(this.time);
        },
        err => console.log(err)
    );
}