JavaScript не назначает элемент объекту - PullRequest
0 голосов
/ 20 сентября 2018
const allocation_me = async (request, response) => {
  try {
    const { user: userid } = request;
    if (!ObjectId.isValid(userid)) throw new Error('invalid objectid');

    const now = moment().format();
    const date = new Date(now);
    const allocation = await Allocation.findOne({ $and: [{ user: userid, start_date: { $lt: date }, end_date: { $gt: date } }] })
      .populate('user', 'name')
      .populate('garden');
    if (!allocation) throw new Error('invalid request');
    allocation.timestamp = moment(allocation.end_date).format('x');
    response.status(200).send(allocation);
  } catch (error) {
    response.status(400).send(error);
  }
};

Я пытаюсь добавить метку времени к объекту, который возвращается запросом Монго, но когда он отправляет распределение в качестве ответа, метка времени не отображается.Я попытался записать значение alloc.timestamp, и оно тоже не показывается, как будто javascript игнорирует меня, назначая его.Я пытался перейти с const на let, но, видимо, это не проблема.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Документы, возвращаемые по запросу, являются документами mongoose / mongodb, а не простыми объектами javascript.

Таким образом, чтобы изменить что-либо в возвращаемом документе, вы должны либо присвоить его new Object(), либо использовать опцию .lean(), которая преобразует объект мангуста впростой объект JavaScript.

const allocation = await Allocation.findOne({})
      .populate('user', 'name')
      .populate('garden')
      .lean()
if (!allocation) throw new Error('invalid request');
allocation.timestamp = moment(allocation.end_date).format('x');
0 голосов
/ 20 сентября 2018

... это как будто javascript игнорирует меня, назначая его.

Это вполне возможно, если объект выделения запечатан или заморожен by MongoDB.

Вместо этого сделайте копию и добавьте свою собственность к копии, возможно, с использованием свойства ES2018:

allocation = {...allocation, timestamp: moment(allocation.end_date).format('x')};

... или если вы не можете использовать распространение свойства, Object.assign:

allocation = Object.assign({}, allocation, {timestamp: moment(allocation.end_date).format('x')});

Вам потребуется изменить const на let в обоих этих случаях, так как мы меняем значение, содержащееся в переменной allocation.Или, конечно, оставьте его как const и запомните измененную версию отдельно:

const updatedAllocation = {...allocation, timestamp: moment(allocation.end_date).format('x')};
response.status(200).send(updatedAllocation);

Я пытался перейти с const на let, но, видимо, это не проблема.

Правильно.const применяется к переменной (allocation), а не к объекту, к которому относится переменная.

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