expressjs - тело запроса изменяется, даже если не используется - PullRequest
0 голосов
/ 11 октября 2018

У меня есть API, разработанный в ExpressJs, который выглядит следующим образом:

router.post('/devices/data/*', function (req, res, next) {
  reqBody = req.body
  console.log(reqBody)
  var pmsCache = reqBody.pms; //pms key exists in body
  pmsCache.k1 = K1; //Adding a new key
  pmsCache.k2 = K2; //Adding a new key
  //
  // Insert into Redis pmsCache - successful
  //
  // Trying to insert into PostgreSQL
  rdbmsPool.connect((err, client, release) => {
    if (err) {
      console.error('Error acquiring client', err.stack)
      throw err
    } else {
      var v;
      var u = true;
      var pms = reqBody.pms
      console.log(reqBody) // This has K1 and K2 - Why ?
      //
      // Logic to insert values into db
      //
      release()
    }
  }
  )
});

req.body как-то меняется после того, как я сделал свое обновление Redis DB.Почему тело меняется?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Javascript управляет объектами, ссылаясь на

Означает, что когда вы присваиваете reqBody.pms в pmsCache, тогда он не создает новую переменную в памяти, а просто назначает адресисходная переменная.

Узнайте больше о ссылках на объекты javascript

https://codeburst.io/explaining-value-vs-reference-in-javascript-647a975e12a0

Чтобы решить вашу проблему, вы должны использовать это

function deepClone(data){
    return JSON.parse(JSON.stringify(data));
} 

var pmsCache = deepClone(reqBody.pms);
0 голосов
/ 11 октября 2018

Я предполагаю, что вы имеете в виду, что reqBody изменяется, как и ожидалось, потому что вы неправильно объявляете эту переменную в начале функции, что означает, что она переводится в глобальную переменную иобщий для всех запросов .

Исправление заключается в использовании правильного объявления переменной:

router.post('/devices/data/*', function (req, res, next) {
  const reqBody = req.body;
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...