Erreur: Échec de la consultation de la vue dans Express

Note : ma réponse automatique à la fin du message

J’essaie de faire une meilleure expérience de nodeJS et je n’aime pas vraiment obtenir tous les scripts dans un seul fichier.

donc, suivant 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 en ce moment:

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'); }); }; 

layout.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 je reçois est:

Erreur: Échec de recherche de la vue “index / index” dans Function.render (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ application.js: 495: 17) lors du rendu (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ response.js: 614: 9) à ServerResponse.render (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ response.js: 638: 5) à c: \ xampp \ htdocs \ nodejs \ bus \ config \ routes.js: 4: 7 aux rappels (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js: 177: 11) at pass (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js: 151: 11) à la passe (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js: 158: 5) à Router._dispatch (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js: 185: 4) à Object.router [comme handle] (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ lib \ router \ index.js: 45: 10) à la prochaine (c: \ xampp \ htdocs \ nodejs \ bus \ node_modules \ express \ node_modules \ connect \ lib \ proto.js: 191: 15)

Mais je ne sais pas vraiment quel est le problème …

Je commence à penser que les modules exportent …

Réponse: Au loin, la solution unique que j’ai trouvée consiste à changer l’endroit où j’ai défini app.set (‘views’) et le moteur de vues

Je l’ai déplacé vers l’app.js et fonctionne maintenant correctement.

 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 le supposer en avoir un.

npm install express@2.5.9 installe la version précédente, si cela vous aide.

Je sais qu’en 3.x, le mécanisme de présentation des vues a été supprimé, mais cela pourrait ne pas être votre problème. Remplacez également express.createServer() par express()

Mettre à jour:

C’est votre __dirname de environment.js
CA devrait etre:

 app.use(express.static(__dirname + '../public')); 

Ajout à la réponse de @ mihai:

Si vous êtes sous Windows, concaténer simplement __dirname' + '../public' se traduira par un nom de répertoire incorrect (par exemple: c:\dev\app\module../public ).

Au lieu de cela, utilisez le path , qui fonctionnera indépendamment du système d’exploitation.

 var path = require ('path'); app.use(express.static(path.join(__dirname + '.../public'))); 

path.join va normaliser le caractère séparateur de chemin et renverra la valeur de chemin correcte.

J’ai eu la même erreur au début et j’étais vraiment énervé. il vous suffit juste d’avoir ./ avant le chemin du modèle

 res.render('./index/index'); 

J’espère que ça marche, travaillé pour moi.

Vérifiez si vous avez utilisé un moteur de vue correct. Dans mon cas, j’ai mis à jour le npm et j’ai fini par changer le moteur en “hjs” (j’essayais de désinstaller jade pour utiliser pug). Donc, changer pour jade à partir de hjs dans le fichier app.js a fonctionné pour moi.

  app.set('view engine','jade'); 

utiliser ce code pour résoudre le problème

 app.get('/', function(req, res){ res.render("index"); }); 

Je viens de remarquer que j’avais nommé mon fichier ' index.html' pour 'index.html' avec un espace de début. C’était pour cela qu’il ne pouvait pas le trouver.

Je change le nom du dossier des vues en vues_render et fait face au même problème que ci-dessus, donc redémarrez server.js et ça marche pour moi.

Cette erreur concerne uniquement le chemin d’access au fichier, tout ce que vous avez à vérifier, pour moi mon dossier parent était “Layouts” mais mon fichier réel était layout.html , mon chemin comportait des mises en page, une fois que j’ai corrigé cette erreur. disparu.

Il est résolu en ajoutant le code suivant dans le fichier app.js

 app.engine('html', require('ejs').renderFile); app.set('view engine', 'html'); app.set('views', __dirname); app.get('/', function(req, res){ res.render("index"); });