MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Warum erhalte ich favicon.ico, wenn ich die findOne-Methode für Express-Params-Routen verwende?

Wenn Sie eine Website (eine beliebige URL auf dieser Website) besuchen, sendet ein Browser normalerweise auch eine Anfrage an dieselbe Domain für /favicon.ico Sehen Sie also nach, ob die Website ein Symbol zur visuellen Darstellung der Website anbietet.

Da Sie eine Wildcard-Top-Level-Route verwenden:

app.get('/:listRoute', ...)

Das wird von der Anfrage nach /favicon.ico getroffen . Einige andere URLs, auf die Sie möglicherweise auch achten müssen, sind:/robots.txt , /humans.txt , /sitemap.xml , /ads.txt .

Es gibt eine Reihe von Möglichkeiten, dies zu umgehen:

  1. Ihre Wildcard-Route kann zuerst req.url prüfen oder req.params.listRoute um zu sehen, ob es etwas ist, das ignoriert werden sollte.

  2. Sie können andere Top-Level-Routen, die Sie von Ihrer Wildcard-Route fernhalten möchten, an einer Position vor dieser Route platzieren, damit sie nicht in dieser Route landen.

  3. Verwenden Sie keine Wildcard-Route der obersten Ebene. Verwenden Sie stattdessen etwas wie /list/:listRoute Daher wird es nicht automatisch mit einer HTTP-Anfrage der obersten Ebene übereinstimmen. Ihre Verwendung einer Top-Level-Wildcard-Route beeinträchtigt andere zukünftige Verwendungen Ihrer Website und kann eine Abwärtskompatibilität für die Zukunft schaffen, wenn Sie Ihrer Website andere Top-Level-Routen hinzufügen möchten. Stellen Sie sich vor, Sie möchten irgendwann in der Zukunft /contact hinzufügen oder /login oder /logout . Diese stehen alle im Konflikt mit /:listRoute .