it-swarm.com.de

Fehler: Ansicht in Express konnte nicht gesucht werden

Hinweis : Meine automatische Antwort am Ende des Beitrags

Ich versuche, nodeJS besser zu machen, und ich mag es nicht wirklich, das gesamte Skript in einer Datei zu haben.

nach einem Beitrag hier verwende ich diese Struktur

./
 config/
   enviroment.js
   routes.js
 public/
   css/
     styles.css
   images
 views
   index
     index.jade
   section
     index.jade
   layout.jade
 app.js

Meine Dateien sind gerade jetzt:

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

Der Fehler, den ich bekomme, ist:

Fehler: Ansicht "Index/Index" konnte nicht gesucht werden at Function.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\application.js: 495: 17) beim Rendern (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js: 614: 9) at ServerResponse.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js: 638: 5) unter c:\xampp\htdocs\nodejs\buses\config\routes.js: 4: 7 bei Rückrufen (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 177: 11) at param (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 151: 11) at pass (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 158: 5) at Router._dispatch (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 185: 4) at Object.router [als Handle] (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 45: 10) bei next (c:\xampp\htdocs\nodejs\buses\node_modules\express\node_modules\connect\lib\proto.js: 191: 15)

Aber ich weiß nicht wirklich, was das Problem ist ...

Ich fange an zu denken, weil die Module exportieren ...

Antwort: In der Ferne ist die einzigartige Lösung, die ich gefunden habe, den Ort zu ändern, den ich für app.set ('views') und view-Engine definiert habe

Ich habe es in die app.js verschoben und funktioniert jetzt gut.

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

Ich verstehe die Logik dahinter nicht wirklich, aber ich nehme an, sie hat eine.

50
nax

npm install [email protected] installiert die vorherige Version, falls dies hilfreich ist.

Ich weiß, dass in 3.x die Ansichtslayout-Mechanik entfernt wurde, aber dies ist möglicherweise nicht Ihr Problem. Ersetzen Sie auch express.createServer() durch express()

Aktualisieren:

Es ist Ihr __dirname von environment.js
Es sollte sein:

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

Hinzufügen zu @ mihai Antwort:

Wenn Sie sich unter Windows befinden, führt die Verkettung von __dirname' + '../public' zu einem falschen Verzeichnisnamen (Beispiel: c:\dev\app\module../public).

Verwenden Sie stattdessen path, das unabhängig vom Betriebssystem funktioniert.

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

path.join normalisiert das Pfadtrennzeichen und gibt den korrekten Pfadwert zurück. 

32
Veera

Sie können dieses Problem lösen, indem Sie den folgenden Code in der Datei app.js hinzufügen

app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname);

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

Ich hatte den gleichen Fehler zuerst und ich war wirklich genervt. Sie müssen nur ./ vor dem Pfad zur Vorlage haben

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

Hoffe es klappt, arbeitete für mich.

4

Überprüfen Sie, ob Sie eine geeignete Ansichts-Engine verwendet haben .. In meinem Fall habe ich die npm aktualisiert und änderte die Engine in 'hjs' (ich habe versucht, Jade zu deinstallieren, um pug zu verwenden) jade von hjs in app.js funktionierte für mich.

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

verwenden Sie diesen Code, um das Problem zu lösen 

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

Dieses Problem tritt grundsätzlich auf, wenn der Dateiname die Groß-/Kleinschreibung berücksichtigt. Wenn Sie beispielsweise die Datei als index.jadge speichern, sollten Sie auf der Route "index" und nicht "index" in Windows angeben Dies wird zu Problemen führen.

1) wenn der Dateiname index.jadge ist

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

2) wenn der Dateiname Index.jadge ist

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

Ich habe gerade bemerkt, dass ich meine Datei ' index.html' statt 'index.html' mit einem führenden Leerzeichen benannt hatte. Deshalb konnte es es nicht finden.

1
Bobby

Sie können den Pfad auf eine solche Konstante setzen und mit express festlegen.

const viewsPath = path.join(__dirname, '../views') 
app.set('view engine','hbs')

 app.set('views', viewsPath)

 app.get('/', function(req, res){

 res.render("index");

});

Das hat bei mir funktioniert

0
Harish-hk

Ich hatte das gleiche problem und konnte es mit der lösung von dougwilson beheben: ab 5. april 2017, github .

  1. Ich habe den Dateinamen von index.js in index.pug geändert
  2. Wird dann in der '/'-Route verwendet: res.render('index.pug') - anstelle von res.render('index')
  3. Setze Umgebungsvariable: DEBUG=express:view Jetzt funktioniert es wie ein Zauber.
0
Chris

Ich ändere den Views-Ordnernamen in views_render und steht vor demselben Problem wie oben. Starten Sie server.js neu und es funktioniert für mich.

0
Vivek

Ich hatte dieses Problem auch unter Linux

I had the following

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

I changed it too
  res.render('../views/index')

Alles funktioniert jetzt.

0
Chris Bounds

Dieser Fehler hat wirklich nur mit dem Dateipfad zu tun, das ist alles, was Sie überprüfen müssen. Mein übergeordneter Ordner war für mich "Layouts", aber meine eigentliche Datei war layout.html. Mein Pfad hatte Layouts auf beiden. Nachdem ich den Fehler behoben hatte, war dieser Fehler verschwunden.

0
Hilary Mwape