маршрут express.js не распознает нулевое значение для условного ответа - PullRequest
0 голосов
/ 01 января 2019

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

То, что я получаю, является истинным значением, даже если значение даты равно нулю.Вот пример:

api / timestamp / hello - мой маршрут.

Действительная дата должна выглядеть следующим образом: {"unix":1546214400000,"utc":"Mon, 31 Dec 2018 00:00:00 GMT"}

Недопустимая дата, такая как 'hello', должна выглядеть следующим образом {'error': 'Invalid Date'}

Код возвращает правильное значение, еслидата действительна, но если дата недействительна, я получаю {"unix":null,"utc":"Invalid Date"} вместо {'error': 'Invalid Date'}

Ниже приведен код.

   app.get('/api/timestamp/:date', (req,res) => {
    let date = new Date(req.params.date);

    if (date === null) {        
        res.send({'error': 'Invalid Date'});             
    } else {
       let unix = date.getTime();  
       let utc = date.toUTCString();
       res.send({unix, utc});  
    }  
});

Я относительно новичок в выражении и Node.js по этому вопросу.Любые мысли о том, почему нулевое значение не распознается?

Ответы [ 3 ]

0 голосов
/ 01 января 2019

То, как вы строите свой ответ, узел думает, что это деструктурирующее назначение , поэтому вы получаете странный ответ.

Чтобы получить то, что вы хотите, вы можете сделать что-то вроде этого:

app.get('/api/timestamp/:date?', (req,res) => {
  if(req.params.date){
    let date = new Date(req.params.date);
    let unix = date.getTime();  
    let utc = date.toUTCString();
    if(unix) return res.send({unix,utc})
    res.send({'error': 'Invalid Date'});
  } else 
    res.send({'error': 'Invalid Date'});
})
0 голосов
/ 02 января 2019

Конструктор даты возвращает дату до 1 января 1970 года, если параметр имеет значение NULL, и я не могу представить ни одного случая, он вернул бы null.

Это означает, что ваша первая проверка всегда будет ложной, так как вашиспользуют строгое равенство.

Возможно, вам лучше проверить, является ли req.params.date is truthy и unix действительной отметкой времени

Надеюсь, это поможет

0 голосов
/ 01 января 2019

В: Не имеет ли смысла проверять действительную дату ДО вы пытаетесь конвертировать ее в Unix и UTC?

app.get('/api/timestamp/:date', (req,res) => {

  let date = new Date(req.params.date);
  if (req.params.date && date instanceOf Date) {
    let unix = date.getTime();  
    let utc = date.toUTCString();
    res.send({unix, utc}); 
  } else {
    res.send({'error': 'Invalid Date'});
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...