AngularJS et de la Manipulation des Erreurs 404
Quelle est la meilleure façon de servir la bonne 404 avec une application AngularJS?
Un peu de contexte: je suis en train de construire un Angulaire de l'application et ont opté pour l'utilisation
$locationProvider.html5Mode(true);
parce que je veux que l'Url de paraître naturel (et impossible à distinguer d'un multi-page "traditionnel" web app).
Sur le côté serveur (un simple Python Flacon app), j'ai un fourre-tout gestionnaire qui redirige tout à l'angle d'application:
@app.route('/', defaults={'path': ''})
@app.route('/<path>')
def index(path):
return make_response(open('Ang/templates/index.html').read())
Maintenant, je suis à essayer de comprendre quoi faire avec des erreurs 404. La plupart de l'angle d'applications que j'ai vu faire ce qui suit:
.otherwise({ redirectTo: '/' })
ce qui signifie qu'il n'y a aucun moyen qu'ils peuvent servir un bon 404.
Cependant, je préférerais de beaucoup de retour d'un bon 404, avec un code d'état 404 (principalement à des fins SEO).
Quelle est la meilleure façon de gérer une erreur 404 Angulaire? Dois-je vous inquiétez pas à ce sujet et le bâton avec un fourre-tout? Ou devrais-je supprimer le fourre-tout et de servir de bon 404 sur le serveur?
édité pour plus de clarté
- que voulez-vous faire sur 404 pourriez-vous parler de votre cas d'utilisation
- Lorsque l'on visite /fasd, on devrait être redirigé vers une page d'erreur 404: "désolé, la page que vous tentez d'accéder n'existe pas". Un code d'état 404 doit être retourné.
- vous avez la possibilité d'enregistrer une réponse de l'intercepteur et vérifier le code d'état dans l'intercepteur, vous trouverez 404 dans le code d'état http, vous pourrait rediriger vers n'importe quel chemin à l'aide de $lieu.chemin ("path")
Vous devez vous connecter pour publier un commentaire.
Je pense que vous confondez Flacon routes Angulaire routes.
L'erreur 404 code fait partie du protocole HTTP. Un serveur web utilise comme une réponse à un client lorsque l'URL demandée n'est pas connu par le serveur. Parce que vous mettez un fourre-tout dans votre Flacon serveur vous ne serez jamais obtenir un 404, Flacon appelle votre fonction d'affichage pour toutes les Url que vous tapez dans la barre d'adresse. À mon avis, vous ne devriez pas avoir un fourre-tout et laissez Flacon de répondre avec 404 lorsque l'utilisateur tape une URL non valide dans la barre d'adresse, il n'y a rien de mal à cela. Flacon vous permet même d'envoyer une page personnalisée lorsqu'un code 404 est retourné, de sorte que vous pouvez faire de la page d'erreur ressembler le reste de votre site.
Sur le côté Angulaire, il n'y a vraiment aucune transaction HTTP parce que tout le routage interne à l'application qui se passe dans le client sans que le serveur même le savoir. Cela peut être une partie de votre confusion, Angulaire liens sont gérées entièrement par le client, sans toute demande faite sur le serveur, même dans html5mode, donc il n'y a pas de concept d'une erreur 404 dans ce contexte, tout simplement parce que il n'y a pas de serveur de participation. Angulaire lien qui vous envoie à une route inconnue sera simplement tomber dans le
otherwise
clause. La bonne chose à faire ici est d'afficher un message d'erreur (si l'utilisateur a besoin de savoir sur cette condition et peut faire quelque chose) ou tout simplement ignorer la route inconnue, comme laredirectTo: '/'
n'.Cela ne semble pas être votre cas, mais si en plus de servir de l'Angulaire de l'application de votre serveur mis en place une API qui Angulaire pouvez l'utiliser pendant qu'il s'exécute, puis Angulaire pourrait obtenir un 404 de Flacon si il fait une requête asynchrone à cette API à l'aide d'une URL non valide. Mais vous ne voulez pas afficher une page d'erreur 404 de l'utilisateur si ce qui s'est passé, puisque la demande a été interne à l'application et ne sont pas déclenchées par l'utilisateur directement.
J'espère que cela aide à clarifier la situation!
"/"
qui sert l'Angulaire de l'application du client. C'est tout. L'angle d'application peut définir autant de voies qu'il a besoin, mais ceux-ci sont côté client, le Flacon serveur n'est pas impliqué dans ces. En effet, avec une telle configuration simple il est clair pour moi pourquoi vous avez besoin de ballon sur le serveur, il semble que vous êtes seulement à servir les fichiers statiques de votre Angulaire de l'application.pre_request
crochet, mais je n'ai jamais essayé, vous ne savez pas si cela fonctionne. Je pense que nous avons fait un cercle complet, si vous aviez à mettre en Flacon (et il me semble que c'est le seul choix raisonnable), puis le fourre-tout de l'itinéraire que vous avez commencé avec est la meilleure façon, parce que vous ne voulez pas d'avoir le côté client routes dupliqué sur le serveur. Vous n'obtiendrez jamais une 404 de Flacon puis, et si un client côté de la route n'est pas valide, vous pouvez juste de redirection "/" angulaires, ou afficher une erreur si vous préférez.Après avoir joué un peu, ainsi que quelques discussions avec Miguel, j'ai compilé quelques-unes des solutions différentes:
/app
). Pour cette section, mettre en place un fourre-tout, et ne vous inquiétez pas bon 404. Vos autres pages vous seront servies régulièrement les pages et de les visiter URL invalide qui ne commence pas avec/app
le résultat sera une bonne 404.P. S. La deuxième option est mon favori personnel. Je l'ai essayé et il fonctionne très bien.
C'est un vieux thread, mais je cam à travers elle tout en cherchant la réponse.
Ajouter ceci à la fin de votre appRoutes.js et de faire un 404.html vue.
Je pense qu'un vrai http 404 va être assez inutile "pour les fins de SEO" si vous ne servez pas utilisable non-javascript, le contenu réel des pages de votre site. Un indexeur de recherche est peu probable d'être en mesure de rendre votre angulaire site pour l'indexation.
Si vous êtes inquiet à propos de SEO, vous aurez besoin d'une sorte de côté de serveur de façon à rendre le contenu de votre angulaire pages sont rendu. Si vous avez cela, l'ajout d'une erreur 404 pour des Url non valide est la partie la plus facile du problème.
Ici est la meilleure façon de gérer l'erreur et fonctionne très bien