J'essaie de rendre une réponse alternative à mon itinéraire express.js lorsqu'une valeur de date dans le paramètre finit par être invalide. Lorsque je vois une date invalide, la valeur finit par être nulle, donc dans mon instruction if dans le middleware, je teste une valeur de vérité et si ce n'est pas vrai, je propose une réponse alternative.
Ce que j'obtiens est la vraie valeur même si la valeur de la date est nulle. Voici un exemple:
api / timestamp / hello est mon itinéraire.
Une date valide doit ressembler à ceci: {"unix": 1546214400000, "utc": "Mon, 31 Dec 2018 00:00:00 GMT"}
p >
Une date invalide comme "bonjour" devrait ressembler à ceci {'error': 'Invalid Date'}
Le code renvoie la valeur correcte si la date est valide , mais si la date n'est pas valide, j'obtiens {"unix": null, "utc": "Invalid Date"}
au lieu de {'error': 'Invalid Date'} code >
Voici le code.
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}); } });
Je suis relativement nouveau dans express et Node.js d'ailleurs. Des idées sur les raisons pour lesquelles la valeur nulle n'est pas reconnue?
3 Réponses :
Q: Ne serait-il pas judicieux de vérifier une date valide AVANT d'essayer de la convertir en Unix et 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'}); } }
Bien sûr, cela a du sens pour moi. Je suis allé de l'avant et j'ai fait ça. Je dois déclarer la variable de date en dehors de l'instruction if car req.params.date renverrait toujours une valeur vraie, mais si je la passe via la méthode Date, c'est là que je vois la valeur nulle. J'obtiens toujours la même réponse même si je convertis la date en unix et utc.
OK - vous pouvez vérifier à la fois "date! = Null" et "date est valide". J'ai mis à jour l'exemple.
De la façon dont vous construisez votre réponse, node pense que c'est un affectation de déstructuration , donc vous obtenez la réponse étrange.
Pour obtenir ce que vous voulez, vous pouvez faire quelque chose comme ceci:
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'}); })
Je n'ai même pas pensé qu'il s'agissait d'une mission de déstructuration. Cela aurait beaucoup de sens. Je devrais clarifier davantage ce problème. Si req.params.date est nul, alors je veux utiliser l'horodatage actuel, s'il n'est pas valide, je veux servir la réponse d'erreur JSON, si elle est valide, je veux servir cet horodatage actuel.
salut, donc si c'est une date valide, vous voulez renvoyer quelque chose comme {date: 1546368889275}? je modifierai ma réponse en conséquence
Merci. Donc, si c'est une date valide, je veux qu'elle renvoie {"unix": 1451001600000, "utc": "Fri, 25 Dec 2015 00:00:00 GMT"}. Si c'est une date invalide, je veux qu'elle renvoie {'error': 'Invalid Date'}. S'il n'y a pas de date dans le paramètre, j'aimerais qu'il renvoie l'horodatage actuel, ce que je peux faire actuellement en déclarant simplement une route pour / api / timestamp /.
salut, a corrigé la réponse à nouveau. en résumé, vous vérifiez si uni est NaN, sinon vous pouvez utiliser l'idiome res.send ({unix, utc}) sans souci.
Merci, cela a vraiment fonctionné! Maintenant, je dois comprendre comment le faire reconnaître les dates Unix :).
Le constructeur de date renvoie la date au 1er janvier 1970 si le paramètre est nul et je ne vois aucun cas où il renverrait null
.
Ce qui signifie que votre première vérification sera toujours fausse puisque vous utilisez une égalité stricte.
Vous feriez probablement mieux de vérifier si req.params.date est véridique
et unix
est un horodatage valide
J'espère que cela vous aidera