Преобразовать строку запроса в объект даты - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть GET конечная точка /internal/users?role=057426a1235fa1084c6f&lastLoggedIn[$lte]=2018-11-07T22:57:44.612Z

Я использую featherjs и клиент для отдыха с перьями для вызова моих услуг.

Моя проблема в том, что я получаю запрос req.query как { role: '057426a1235fa1084c6f', lastLogged: { $lte: '2018-11-07T22:57:44.612Z' } } и я получаю дату как строку, а не объект даты.

Можно ли как-нибудь преобразовать мой запрос, чтобы получить правильный объект даты, если я обнаружил какую-либо строку ISODate?

Я пробовал что-то вроде

app.use((req, res, next) => {
  const queryFlat = flat(req.query);
  for (key in queryFlat) {
    queryFlat[key] = dateCheck(queryFlat[key]) // dateCheck returns date object if ISODate String
  }
  req.query = unlfat(queryFlat)
});

Это работает нормально, но есть ли способ, которым я могу перейти к qs.parser, который может автоматически конвертировать строку даты в объект даты?

1 Ответ

0 голосов
/ 10 ноября 2018

Я думаю, что у ваших flat и unflat могут возникнуть проблемы, если вы передадите какой-либо запрос с ключами, содержащими сам ..

так, это может помочь, используя qs library

app.use(req, res, next) => {
   req.query = qs.parse(qs.stringify(req.query), {
    decoder: dateCheck, // dateCheck returns date object if ISODate String
  });
}

Ваша функция dateCheck должна выглядеть примерно так

const dateCheck = (value, decoder) => {
  const key = decoder(value); // this 
  //      ... rest of date check function
}
...