Erreur: Échec de la recherche de la vue dans l'Express
Note: ma réponse automatique à la fin de l'après
Je suis en train de faire une meilleure expérience de nodeJS et je n'aime pas vraiment pour obtenir tous les script dans un fichier.
donc, à la suite d'un post ici, j'utilise cette structure
./
config/
enviroment.js
routes.js
public/
css/
styles.css
images
views
index
index.jade
section
index.jade
layout.jade
app.js
Mes fichiers sont maintenant:
app.js
var express = require('express');
var app = module.exports = express.createServer();
require('./config/enviroment.js')(app, express);
require('./config/routes.js')(app);
app.listen(3000);
enviroment.js
module.exports = function(app, express) {
app.configure(function() {
app.use(express.logger());
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views');
app.set('view engine', 'jade'); //extension of views
});
//development configuration
app.configure('development', function() {
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
//production configuration
app.configure('production', function() {
app.use(express.errorHandler());
});
};
routes.js
module.exports = function(app) {
app.get(['/','/index', '/inicio'], function(req, res) {
res.render('index/index');
});
app.get('/test', function(req, res) {
//res.render('index/index');
});
};
mise en page.jade
!!! 5
html
head
link(rel='stylesheet', href='/css/style.css')
title Express + Jade
body
#main
h1 Content goes here
#container!= body
index/index.jade
h1 algoa
L'erreur que j'obtiens est:
D'erreur: Échec de la recherche de la vue "index/index"
à une Fonction.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\application.js:495:17)
lors du rendu (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js:614:9)
au ServerResponse.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js:638:5)
au c:\xampp\htdocs\nodejs\buses\config\routes.js:4:7
lors de rappels (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:177:11)
au param (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:151:11)
au col (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:158:5)
au Routeur._dispatch (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:185:4)
à l'Objet.routeur [gérer] (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:45:10)
à la prochaine (c:\xampp\htdocs\nodejs\buses\node_modules\express\node_modules\connect\lib\proto.js:191:15)
Mais je ne sais pas vraiment quel est le problème...
Je suis de départ de la pensée est parce que les modules exportations...
Réponse:
Loin de là l'unique solution que j'ai trouvé est de changer le lieu que j'ai défini app.set ("vues") et des points de vue moteur
Je l'ai déplacé à la app.js et maintenant, c'est bien le travail.
var express = require('express');
var app = module.exports = express.createServer();
require('./config/enviroment.js')(app, express);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
require('./config/routes.js')(app);
app.listen(3000);
Je ne comprends pas vraiment la logique derrière cela, mais je vais supose il en avoir un.
- Je suppose que vous êtes encore sur express 2.x, puisque les choses sont un peu différentes dans les 3.x
- peut être que. je suis en suivant les guides de expressjs.com mais je ne vois pas du tout de express3 :s
- ouais, il est toujours en alpha. si vous avez installé récemment avec npm, vous devriez l'avoir (3.0.0 alpha). Mieux d'en faire un
npm ls
pour voir quelle version vous avez. - Désolé j'ai oublié d'ajouter, j'ai 3.0.0alpha1 il n'y a aucun moyen que je peux utiliser la v2 ou, si c'est mieux d'avoir toute la documentation?
- Lorsque la question de la réponse auto est mieux que la accepté de répondre...
Vous devez vous connecter pour publier un commentaire.
npm install [email protected]
installe la version précédente, si cela aide.Je sais que dans le 3.x la disposition de l'affichage mécanicien a été enlevé, mais cela pourrait ne pas être votre problème. Également remplacer
express.createServer()
avecexpress()
Mise à jour:
C'est votre __dirname de environment.js
Il doit être:
express.static(__dirname + '../public')
désigne "le précédent répertoire de __dirname. Si __dirname est réglé sur /app/private/,'../public'
allait changer à /app/public/.L'ajout de @mihai réponse:
Si vous êtes sous Windows, puis vient de la concaténation de
__dirname' + '../public'
résultat sera mauvais nom de répertoire (Par exemple:c:\dev\app\module../public
).Au lieu d'utiliser
path
, qui fonctionnent indépendamment du système d'exploitation.chemin d'accès.rejoindre permettra de normaliser le séparateur de chemin de caractère et sera de retour le chemin d'accès correct de la valeur.
J'ai eu la même erreur au début et j'ai été vraiment ennuyé.
vous avez juste besoin d'avoir
./
avant le chemin d'accès au modèleEspère que ça fonctionne, il a travaillé pour moi.
Il est résolu en ajoutant le code suivant dans app.js fichier
Vérifier si vous avez utilisé un bon moteur d'affichage.
Dans mon cas, j'ai mis à jour le mécanisme national de prévention et à la fin, à modifier le moteur de 'hjs'(j'ai essayé de désinstaller jade à utiliser pug).
Afin de la modifier à jade de hjs dans app.js fichier a fonctionné pour moi.
utiliser ce code pour résoudre le problème
Viens de remarquer que j'avais nommé mon fichier
' index.html'
au lieu de'index.html'
avec un espace. C'est pourquoi il ne pouvait pas le trouver.Ce problème est essentiellement visible à cause de la casse du nom de fichier.
par exemple, si vous enregistrez un fichier index.jadge que sa crinière sur la route, il doit être "index", et pas "Index" dans windows c'est ok, mais dans linux comme serveur cela permettra de créer de problème.
1) si le nom de fichier est index.jadge
2) si le nom de fichier est Index.jadge
- Je changer la vue sur le nom du dossier à views_render et faire face à la même question que ci-dessus, alors redémarrer server.js et cela fonctionne pour moi.
Cette erreur vraiment juste a faire avec le Chemin d'accès au fichier,c'est tout ce que vous avez à vérifier,pour moi mon dossier parent a été "Mises en page", mais mon fichier réel a été
layout.html
,mon chemin était mise en page sur deux,une fois que j'ai corrigé cette erreur a disparu.J'ai eu le même problème et pourrait la fixer avec la solution de dougwilson: Avril 5, 2017, Github.
index.js
àindex.pug
'/'
route:res.render('index.pug')
- au lieu deres.render('index')
DEBUG=express:view
Maintenant, il fonctionne comme un charme.
Vous pouvez définir le chemin d'accès à une constante comme cela et définir à l'aide de l'express.
Cela a fonctionné pour moi