Fout: opzoeken in Express mislukt

Opmerking: mijn automatische antwoord aan het einde van het bericht

Ik probeer een betere ervaring van nodeJS te maken en ik hou er niet echt van om al het script in één bestand te krijgen.

dus, na een bericht hier gebruik ik deze structuur

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

Mijn bestanden zijn nu:

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

omgeving.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

De foutmelding die ik krijg is:

Fout: kan de weergave “index/index” niet opzoeken
op Function.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\application.js:495:17)
bij render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js:614:9)
op ServerResponse.render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js:638:5)
op c:\xampp\htdocs\nodejs\buses\config\routes.js:4:7
bij terugbellen (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:177:11)
op 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)
op Router._dispatch (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:185:4)
op Object.router [als handvat] (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js:45:10)
bij volgende (c:\xampp\htdocs\nodejs\buses\node_modules\express\node_modules\connect\lib\proto.js:191:15)

Maar ik weet niet echt wat het probleem is…

Ik begin te denken omdat de modules exporteren…

Antwoord:
Ver weg is de unieke oplossing die ik heb gevonden om de plaats te wijzigen die ik heb gedefinieerd app.set(‘views’) en views engine

Ik heb het verplaatst naar app.js en werkt nu goed.

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

Ik begrijp de logica hierachter niet echt, maar ik neem aan dat het er een heeft.


Antwoord 1, autoriteit 100%

npm install [email protected]installeert de vorige versie, als dit helpt.

Ik weet dat in 3.x het mechanisme van de weergavelay-out is verwijderd, maar dit is misschien niet jouw probleem. Vervang ook express.createServer()door express()

Bijwerken:

Het is je __dirname van environment.js
Het zou moeten zijn:

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

Antwoord 2, autoriteit 91%

Toevoegen aan het antwoord van @mihai:

Als je in Windows werkt, zal het samenvoegen van __dirname' + '../public'resulteren in een verkeerde mapnaam (bijvoorbeeld: c:\dev\app\module../public).

Gebruik in plaats daarvan path, dat werkt ongeacht het besturingssysteem:

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

path.joinnormaliseert het padscheidingsteken en retourneert de juiste padwaarde.


Antwoord 3, autoriteit 33%

Het is opgelost door de volgende code toe te voegen aan het app.js-bestand

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

Antwoord 4, autoriteit 24%

Ik had eerst dezelfde fout en ik was echt geïrriteerd.
je hoeft alleen maar ./te hebben voor het pad naar de sjabloon

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

Ik hoop dat het werkt, werkte voor mij.


Antwoord 5, autoriteit 18%

Je zou het pad naar een constante als deze kunnen instellen en het met express kunnen instellen.

const viewsPath = path.join(__dirname, '../views') 
app.set('view engine','hbs')
 app.set('views', viewsPath)
 app.get('/', function(req, res){
 res.render("index");
});

Dit werkte voor mij


Antwoord 6, autoriteit 9%

Controleer of je een goede view-engine hebt gebruikt.
In mijn geval heb ik de npm bijgewerkt en eindigde ik met het veranderen van de motor in ‘hjs’ (ik probeerde jade te verwijderen om pug te gebruiken).
Dus het veranderen van het naar jade van hjs in het app.js-bestand werkte voor mij.

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

Antwoord 7, autoriteit 6%

Dit probleem wordt in principe gezien vanwege de hoofdlettergevoelige bestandsnaam.
als u bijvoorbeeld het bestand opslaat als index.jadge dan zijn manen op de route, zou het “index” moeten zijn en niet “Index” in Windows, dit is oké, maar in een Linux-achtige server zal dit een probleem veroorzaken.

1)als de bestandsnaam index.jadge

is

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

2)als de bestandsnaam Index.jadge

is

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

Antwoord 8, autoriteit 6%

In mijn geval heb ik het als volgt opgelost:

app.set('views', `${__dirname}/views`);
app.use(express.static(`${__dirname}/public`));

Ik moest node app.min.jsstarten vanuit de map /dist.

Mijn mappenstructuur was:

App starten vanaf /dist


Antwoord 9, autoriteit 3%

gebruik deze code om het probleem op te lossen

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

Antwoord 10, autoriteit 3%

Ik merkte net dat ik mijn bestand ' index.html'had genoemd in plaats van ' index.html'met een voorloopspatie. Daarom kon het het niet vinden.


Antwoord 11

Ik verander de mapnaam van views in views_render en heb ook hetzelfde probleem als hierboven, dus herstart server.js en het werkt voor mij.


Antwoord 12

Deze fout heeft eigenlijk alleen te maken met het bestandspad, dat is alles wat je hoeft te controleren, voor mij was mijn bovenliggende map “Layouts” maar mijn eigenlijke bestand was layout.html, mijn pad had lay-outs op beide, nadat ik die fout had gecorrigeerd, was het verdwenen.


Antwoord 13

Ik had hetzelfde probleem en kon het oplossen met de oplossing van dougwilson: vanaf 5 april 2017, Github.

  1. Ik heb de bestandsnaam gewijzigd van index.jsin index.pug
  2. Vervolgens gebruikt in de '/'route: res.render('index.pug')– in plaats van res.render('index')
  3. Stel omgevingsvariabele in: DEBUG=express:view
    Nu werkt het als een tierelier.

Antwoord 14

Ik had dit probleem ook onder Linux

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

Alles werkt nu.


Antwoord 15

Ik had hetzelfde probleem. Controleer dan gewoon de bestandsmap in uw verkenner. Soms is de map Views niet aanwezig.

Other episodes