Route par défaut dans Express.js
Je suis en train d'écrire une application avec node.js et express.
J'ai configurer une route par défaut comme ceci :
app.get('/', function(req, res){
res.sendfile('./views/index.html');
});
Cela fonctionne très bien lorsque je goto /localhost:port/
Mais dans l'URL quand je tape quelque chose après cela, /localhost:port/bla-je obtenir de l'ERREUR 404 qui a du sens.
Je veux configurer une route par défaut, de sorte que peu importe ce que je tape dans l'URL localhost:port/tout devrait revenir le même fichier html.
J'ai essayé de changer /* :
app.get('*', function(req, res){
res.sendfile('./views/index.html');
});
mais après je fais ce que je commence à obtenir de cette erreur dans la console et rien ne s'affiche:
Uncaught SyntaxError: Unexpected token <
dans tous mes fichiers Javascript: :3000/scripts/script.js:1
en quelque sorte mon fichier javascript afficher le contenu HTML
===EDIT====
Je l'utilise et il a bien fonctionné pour le premier niveau d'url: comme loclhost:port/bla
app.use(function(req, res){
res.sendfile('./views/index.html');
});
mais quand les Url sont multi-niveaux, je vois le même problème que décrit plus haut localhost:port/titi/toto
Le problème ici est que le routeur est à la recherche de public sous-répertoire de /bla dossier pour tous les fichiers javascript et CSS dans ce cas, qui n'existe pas. Et c'est en retournant le fichier HTML par défaut. Comment puis-je résoudre ce problème?
==================MODIFIER L'AFFICHAGE DE L'ENSEMBLE DU CODE =========================================
var http = require('http');
var express = require('express');
var api = require('./routes/api');
var mongoose = require('mongoose');
var app = express();
mongoose.connect('mongodb://localhost/mydb');
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.get('/api/user/:userid', api.getUserInfo);
app.get('/', function(req, res){
res.sendfile('./views/index.html');
});
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
En plus de cela, j'ai un code HTML avec un script lié,
<script type="text/javascript" src="./scripts/myscript.js" ></script>
source d'informationauteur sublime | 2014-03-26
Vous devez vous connecter pour publier un commentaire.
Comme indiqué icivous pouvez ajouter ce middleware juste après votre logique de routage:
Vous pourriez trouver cette réponse également utile.
Bien sûr, vous avez besoin d'adapter le
res.send()
partie pour répondre à vos besoins.Espère que cela aide.
Ajouter cette route au après de tous vos itinéraires précédents
Cela permettra de rediriger n'importe quel itinéraire n'est pas manipulé à l'index "/"
Avec la version la plus récente de l'express, je voudrais suggérer à l'aide de res.sendStatus res.envoyer a été désapprouvée.
Express v3
Express v4