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 avoir tout le script dans un seul fichier.
donc, après 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 lors de la recherche dans la vue "index/index" à l'adresse Function.render (c:\xampp\htdocs\nodejs\bus\modules_noeud\express\lib\application.js: 495: 17) à l’affichage du rendu (c:\xampp\htdocs\nodejs\bus\modules_noeud\express\lib\response.js: 614: 9) sur ServerResponse.render (c:\xampp\htdocs\nodejs\bus\modules_noeud\express\lib\response.js: 638: 5) sur c:\xampp\htdocs\nodejs\bus\config\routes.js: 4: 7 lors des rappels (c:\xampp\htdocs\nodejs\bus\modems_noeud\express\lib\routeur\index.js: 177: 11) at param (c:\xampp\htdocs\nodejs\bus\modules_noeud\express\lib\routeur\index.js: 151: 11) at pass (c:\xampp\htdocs\nodejs\bus\node_modules\express\lib\routeur\index.js: 158: 5) at Router._dispatch (c:\xampp\htdocs\nodejs\bus\modules_noeud\express\lib\routeur\index.js: 185: 4) sur Object.router [en tant que descripteur] (c:\xampp\htdocs\nodejs\bus\modules_noeud\express\lib\routeur\index.js: 45: 10). at next (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 c'est parce que les modules exportent ...
Réponse: De loin, la solution unique que j'ai trouvée est de changer le lieu que j'ai défini app.set ('views') et le moteur de vues.
Je l'ai déplacé à l'app.js et maintenant fonctionne bien.
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 en supposer un.
npm install [email protected]
installe la version précédente, si cela vous aide.
Je sais que dans 3.x le mécanisme de présentation de la vue a été supprimé, mais ce n'est peut-être pas votre problème Remplacez également express.createServer()
par express()
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, il suffit alors de concaténer __dirname' + '../public'
pour obtenir un nom de répertoire incorrect (par exemple: c:\dev\app\module../public
).
Utilisez plutôt path
, qui fonctionnera indépendamment du système d'exploitation.
var path = require ('path');
app.use(express.static(path.join(__dirname + '.../public')));
path.join normalisera le caractère séparateur de chemin et renverra la valeur de chemin correcte.
Pour résoudre ce problème, ajoutez 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");
});
Au début, j’ai eu la même erreur et j’étais vraiment ennuyé ... vous devez juste avoir ./
avant le chemin vers le modèle
res.render('./index/index');
J'espère que ça marche, a fonctionné pour moi.
Vérifiez si vous avez utilisé un moteur de visualisation approprié . Dans mon cas, j'ai mis à jour le npm et je finis par changer le moteur en 'hjs' (j'essayais de désinstaller jade pour utiliser pug) . Jade 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");
});
Ce problème est essentiellement dû au nom de fichier sensible à la casse . Par exemple, si vous enregistrez le fichier sous le nom index.jadge, il doit être "index" et non "Index" dans Windows, mais c'est correct, mais sous Linux comme serveur cela va créer un problème.
1) si le nom du fichier est index.jadge
app.get('/', function(req, res){
res.render("index");
});
2) si le nom du fichier est Index.jadge
app.get('/', function(req, res){
res.render("Index");
});
Je viens de remarquer que j'avais nommé mon fichier ' index.html'
à la place de 'index.html'
avec un espace de début. C'était pourquoi il ne pouvait pas le trouver.
Vous pouvez définir le chemin d'accès à une constante comme celle-ci et le définir à l'aide de la commande express.
const viewsPath = path.join(__dirname, '../views')
app.set('view engine','hbs')
app.set('views', viewsPath)
app.get('/', function(req, res){
res.render("index");
});
Cela a fonctionné pour moi
J'avais le même problème et je pouvais le résoudre avec la solution de dougwilson: à partir du 5 avril 2017, Github .
index.js
à index.pug
'/'
: res.render('index.pug')
- au lieu de res.render('index')
DEBUG=express:view
Cela fonctionne maintenant comme un charme.Je change le nom du dossier de vues en views_render et au même problème que précédemment, alors redémarrez server.js et cela fonctionne pour moi.
Cette erreur ne concerne que le chemin du fichier, c’est tout ce que vous avez à vérifier. Pour moi, mon dossier parent était "Layouts" mais mon fichier réel était layout.html
, mon chemin avait des dispositions sur les deux, une fois que j’ai corrigé cette erreur.