Некоторые вызовы API express вызывают ошибки при использовании React после рефакторинга некоторых вызовов API. - PullRequest
0 голосов
/ 01 мая 2020

Я понимаю, что этот вопрос был задан забвению, но я не смог решить свою конкретную проблему с ним.

Когда я начал свой проект, у меня тоже была ошибка cors, но после добавления следующего они исчезли, до сегодняшнего дня я решил перефразировать код приложения, и он внезапно перестал работать, забавный факт, что старый код работал нормально. 1007 *

Но дело в том, что работает каждый вызов API, кроме одного. И даже лучше, он работает случайно, иногда выдает ошибку cors, а иногда нет. Вот почему я потерян.

Я скачал chrome расширение Moesif origin and cors changer, и это, кажется, единственный способ заставить его работать. Но это недопустимое решение.

Почему это происходит?

Вот мой вызов API. Поскольку вы можете наблюдать простой вызов с некоторыми манипуляциями с базой данных, вот и все, он должен вернуть res.status, равный 100, но я не могу увидеть его при использовании расширения chrome, в противном случае он будет заблокирован ccors

    //generate calendar
app.post('/generateCalendar', async (req, res) => {

  const userId = req.body.userId
  const yearsToLive = req.body.yearsToLive
  const registerDate = req.body.registerDate

  function filterDate(date) {
    var stringDate = moment(date).format('YYYY-MM-DD').toString();
    console.log("dentro del filter date")
    var result = stringDate.match(/(?:(?!T).)*/)
    return result[0];
  }

  function getWeeksToLive(death_date, birth_date) {
    //returns the weeks to live between death and birth date, rounded to upper week

    var weeks_to_live = moment(death_date).diff(moment(birth_date), 'days') / 7;
    console.log("semanas a vivir: " + Math.ceil(weeks_to_live))
    return Math.ceil(weeks_to_live);
  }


  //sets the deathDate and weeksToLive in the database
  db.query("SELECT * from users where id =" + userId).then(data => {
    var birth_date = data[0].birth_date
    var deathDate = ""
    //sets the death_date and the weeks to live
    deathDate = moment(filterDate(birth_date)).add(yearsToLive, 'years')
    db.query("UPDATE users SET death_date = '" + moment(deathDate).format('YYYY-MM-DD').toString() + "' , weeks_to_live = '" + getWeeksToLive(deathDate, birth_date) + "' WHERE id = '" + userId + "';").then(data => {
      console.log(data)
      /*******/
      //Sets the yearsToLive and registerDate in the database
      db.query("UPDATE users SET years_to_live =  '" + yearsToLive + "' , register_date = '" + registerDate + "'  WHERE id = '" + userId + "';").then(data => {
        console.log(data)
        db.query("INSERT INTO calendar (user_id) values ('" + userId + "');").then(data => {
          console.log(data)
          // res.send(data)
          /*******/
          //Sets all the field for the calendar
          db.query("INSERT INTO calendar_field (text, rating, calendar_id, week_number) select '', 0, c.id, g.wn from calendar c join users u on u.id = c.user_id cross join generate_series(1, u.weeks_to_live) as g(wn);").then(data => {
            console.log(data);
            console.log("series generated")
            /******/
            //the lifeExpectanceSet restriction is removed and access to dashboard is granted
            db.query("UPDATE user_permissions SET life_expectancy =  'false' , dashboard = 'true'  WHERE user_id = '" + userId + "';").then(data => {
              console.log("everything generated")
              res.sendStatus(100)
              console.log(data)
            }).catch(err => console.log(err))
          }).catch(err => console.log(err))
        })
      }).catch(err => {
        console.log(err)
        res.send(err)
      })
    }).catch(err => console.log(err))

  })




})

Это старый код, когда он работал, я действительно ничего не делал, кроме рефакторинга некоторых вещей

    //generate calendar
app.post('/generateCalendar', async (req, res) => {

  const userId = req.body.userId
  const yearsToLive = req.body.yearsToLive
  const registerDate = req.body.registerDate

  function filterDate(date) {
    var stringDate = moment(date).format('YYYY-MM-DD').toString();
    console.log("dentro del filter date")
    var result = stringDate.match(/(?:(?!T).)*/)
    return result[0];
  }

  function getWeeksToLive(death_date, birth_date) {
    //returns the weeks to live between death and birth date, rounded to upper week

    var weeks_to_live = moment(death_date).diff(moment(birth_date), 'days') / 7;
    console.log("semanas a vivir: " + Math.ceil(weeks_to_live))
    return Math.ceil(weeks_to_live);
  }


  //sets the deathDate and weeksToLive in the database
  db.query("SELECT * from users where id =" + userId).then(data => {
    var birth_date = data[0].birth_date
    var deathDate = ""
    //sets the death_date and the weeks to live
    deathDate = moment(filterDate(birth_date)).add(yearsToLive, 'years')
    db.query("UPDATE users SET death_date = '" + moment(deathDate).format('YYYY-MM-DD').toString() + "' , weeks_to_live = '" + getWeeksToLive(deathDate, birth_date) + "' WHERE id = '" + userId + "';").then(data => {
      console.log(data)
    }).catch(err => console.log(err))

  })

  //Sets the yearsToLive and registerDate in the database
  db.query("UPDATE users SET years_to_live =  '" + yearsToLive + "' , register_date = '" + registerDate + "'  WHERE id = '" + userId + "';").then(data => {
    console.log(data)
    db.query("INSERT INTO calendar (user_id) values ('" + userId + "');").then(data => {
      console.log(data)
      res.send(data)
    })
  }).catch(err => {
    console.log(err)
    res.send(err)
  })

  //Sets all the field for the calendar

   db.query("INSERT INTO calendar_field (text, rating, calendar_id, week_number) select '', 0, c.id, g.wn from calendar c join users u on u.id = c.user_id cross join generate_series(1, u.weeks_to_live) as g(wn);").then(data => {
     console.log(data);
   }).catch(err => console.log(err))


})

1 Ответ

0 голосов
/ 01 мая 2020

Хорошо, проблема в том, что res.sendStatus () по какой-то причине не работает, я переключился на res.send ("string"), и он делает свое дело

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...