NodeJS: более короткий способ создания условного свойства в объекте, чем функция, вызываемая самим собой? (либо ES5, либо ES6) - PullRequest
0 голосов
/ 08 мая 2018

Есть ли более короткий способ выразить следующее? (либо ES5, либо ES6)

res.cookie('abc', 'xyz', (function(){
            var obj = {maxAge: 900000, httpOnly: true };
            if (process.env.NODE_ENV==="production"){
                obj.secure = true;
            }
            return obj;
        })());

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Вы можете использовать троичный https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator, поскольку троичные являются выражениями.

   res.cookie('abc', 'xyz', {
      maxAge: 9 * 100 * 1000,
      httpOnly:true,
      secure: process.env.NODE_ENV==="production" ? true : undefined
    }); 
0 голосов
/ 08 мая 2018

ES6 предлагает метод Object.assign, который вы можете использовать следующим образом:

var obj = Object.assign(
  {
    maxAge: 900000,
    httpOnly: true,
  },
  process.env.NODE_ENV === "production"
    ? { secure: true }
    : {}
)

Это обеспечит отсутствие ключа secure в конечном объекте, если среда не является рабочей. Если у вас все в порядке с ключом, находящимся там, но со значением false, тогда:

var obj = {
  maxAge: 900000,
  httpOnly: true,
  secure: process.env.NODE_ENV === "production",
}

будет достаточно.


В еще более новых версиях ECMAScript у вас есть доступ к деструктуризации объектов с помощью оператора .... Таким образом, вы можете превратить первый фрагмент в более краткую версию:

var obj = {
  maxAge: 900000,
  httpOnly: true,
  ...process.env.NODE_ENV === "production"
    ? { secure: true }
    : {},
}
0 голосов
/ 08 мая 2018

res.cookie('abc', 'xyz', {
  maxAge: 900000,
  httpOnly: true,
  secure: process.env.NODE_ENV === "production"
});
...