Je ne connais pas de fonction pour faire cela, quelqu'un en connaît-il une ?
Veuillez définir le terme "manipulé". Qu'est-ce qui caractérise exactement la route comme étant manipulée ?
Je ne connais pas de fonction pour faire cela, quelqu'un en connaît-il une ?
J'ai trouvé cet exemple très utile :
https://github.com/visionmedia/express/blob/master/examples/error-pages/index.js
Donc, c'est en fait cette partie :
// "app.router" positions our routes
// above the middleware defined below,
// this means that Express will attempt
// to match & call routes _before_ continuing
// on, at which point we assume it's a 404 because
// no route has handled the request.
app.use(app.router);
// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.
// $ curl http://localhost:3000/notfound
// $ curl http://localhost:3000/notfound -H "Accept: application/json"
// $ curl http://localhost:3000/notfound -H "Accept: text/plain"
app.use(function(req, res, next) {
res.status(404);
// respond with html page
if (req.accepts('html')) {
res.render('404', { url: req.url });
return;
}
// respond with json
if (req.accepts('json')) {
res.json({ error: 'Not found' });
return;
}
// default to plain-text. send()
res.type('txt').send('Not found');
});
Veuillez définir le terme "manipulé". Qu'est-ce qui caractérise exactement la route comme étant manipulée ?
Pour votre information, l'utilisation de app.router
est maintenant déprécié. Voir github.com/strongloop/express/wiki/
Je pense que vous devriez d'abord définir toutes vos routes et comme dernière route ajouter
//The 404 Route (ALWAYS Keep this as the last route)
app.get('*', function(req, res){
res.status(404).send('what???');
});
Un exemple d'application qui fonctionne :
var express = require('express'),
app = express.createServer();
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res){
res.send('hello world');
});
//The 404 Route (ALWAYS Keep this as the last route)
app.get('*', function(req, res){
res.send('what???', 404);
});
app.listen(3000, '127.0.0.1');
alfred@alfred-laptop:~/node/stackoverflow/6528876$ mkdir public
alfred@alfred-laptop:~/node/stackoverflow/6528876$ find .
alfred@alfred-laptop:~/node/stackoverflow/6528876$ echo "I don't find a function for that... Anyone knows?" > public/README.txt
alfred@alfred-laptop:~/node/stackoverflow/6528876$ cat public/README.txt
.
./app.js
./public
./public/README.txt
alfred@alfred-laptop:~/node/stackoverflow/6528876$ curl http://localhost:3000/
hello world
alfred@alfred-laptop:~/node/stackoverflow/6528876$ curl http://localhost:3000/README.txt
I don't find a function for that... Anyone knows?
Eh bien... le problème est que le "*" correspond déjà aux fichiers .js et .css, et qu'ils ne sont pas spécifiés dans l'application... eh bien, je ne sais pas s'il existe un moyen d'attraper exactement la même chose que l'erreur 404, ou un moyen d'écraser le message "Cannot get...". Quoi qu'il en soit, je vous remercie
Utilisez-vous un intergiciel statique, car vous pouvez alors toujours servir des fichiers statiques ?
app.get('/public/*', function(req, res){ res.sendfile(__dirname + '/public/' + req.url); })
vous pouvez utiliser cette route pour envoyer des fichiers statiques. cela fonctionne bien avec la route "*" ci-dessus. app.use(express.static(__dirname + '/public'));
ne fonctionne pas pour moi, câblé.
Veuillez envisager une réponse un peu plus verbeuse la prochaine fois... Les exemples sont généralement bien - et celui-ci est un bon exemple - mais une explication peut être très, très bien aussi...
+1 Très bien ! Je pense que c'est mieux qu'une dernière route, parce que de cette façon tu n'as pas à use()
votre app.router
au dernier moment. (comme dans mon cas)
En outre, cela remplace le comportement par défaut sur tout demande (pas seulement GET
s). Essayez de POST
une URL aléatoire avec l'autre méthode ; elle renverra l'URL par défaut. Cannot POST...
. Un attaquant saurait alors que vous utilisez Express.JS.
Les réponses ci-dessus sont bonnes, mais dans la moitié d'entre elles, vous n'obtiendrez pas 404 comme code d'état HTTP retourné et dans l'autre moitié, vous ne serez pas en mesure d'avoir un rendu de modèle personnalisé. La meilleure façon d'avoir une page d'erreur personnalisée (404) dans Expressjs est la suivante
app.use(function(req, res, next){
res.status(404).render('404_error_template', {title: "Sorry, page not found"});
});
Placez ce code à la fin de tous vos mappages d'URL.
https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js
C'est ce que fait node-boilerplate.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.