Fout: kan module html niet vinden

Ik gebruik Node.js al heel lang niet meer en heb nooit express gebruikt. Toen ik mijn aanvraag startte, kwam deze net terug:

Error: Cannot find module 'html'
  at Function.Module._resolveFilename (module.js:338:15)
  at Function.Module._load (module.js:280:25)
  at Module.require (module.js:364:17)
  at require (module.js:380:17)
  at new View (C:\Users\fr\node_modules\express\lib\view.js:42:49)
  at Function.app.render (C:\Users\fr\node_modules\express\lib\application.js:483:12)
  at ServerResponse.res.render (C:\Users\fr\node_modules\express\lib\response.js:755:7)
  at allClients (C:\Users\fr\node_modules\apps\chat.js:13:7)
  at callbacks (C:\Users\fr\node_modules\express\lib\router\index.js:161:37)
  at param (C:\Users\fr\node_modules\express\lib\router\index.js:135:11)

De fout deed zich voor toen ik test.html startte. Hier is de code:

var io = require('socket.io');
var express = require('express');
var app = express(),
http = require('http'),
server = http.createServer(app),
socket = require('socket.io').listen(server);
app.configure(function(){
    app.use(express.static(__dirname));
});
app.get('/', function(req, res, next){
    res.render('./test.html');
});
server.listen(8333);

Mijn pad :

node_modules/
    express/
    socket.io/
    apps/
        chat.js
        test.html

Waarom?

BEWERKEN:

Dit is mijn nieuwe app.configure :

app.configure(function(){
    app.use(express.static(path.join(__dirname, 'public')));
});

Maar het keert terug:

 path is not defined

Antwoord 1, autoriteit 100%

Ik neem aan dat test.html een statisch bestand is. Om statische bestanden weer te geven gebruik de statische middleware graag zo.

app.use(express.static(path.join(__dirname, 'public')));

Dit vertelt express om te zoeken naar statische bestanden in de openbare map van de applicatie.

Zodra je dit hebt opgegeven, richt je je browser naar de locatie van het bestand en het zou moeten verschijnen.

Als u de weergaven echter wilt weergeven, moet u de juiste renderer ervoor gebruiken. De lijst met weergaven is gedefinieerd in consolideren.Als je eenmaal hebt besloten welke bibliotheek je wilt gebruiken, installeer je deze. Ik gebruik snor, dus hier is een fragment van mijn configuratiebestand

var engines = require('consolidate');
app.set('views', __dirname + '/views');
app.engine('html', engines.mustache);
app.set('view engine', 'html');

Wat dit doet is duidelijk maken aan

  • zoek naar bestanden om weer te geven in de map views

  • Render de bestanden met snor

  • De extensie van het bestand is .html(u kunt ook .snor gebruiken)


Antwoord 2, autoriteit 43%

Een eenvoudige manier is om de EJS-sjabloonengine te gebruiken voor het aanbieden van .html-bestanden. Zet deze regel direct naast je view engine setup:

app.engine('html', require('ejs').renderFile);

Antwoord 3, autoriteit 14%

Installeer ejs als dat niet het geval is.

npm install ejs

Plak dan onder twee regels in je hoofdbestand. (zoals app.js, main.js)

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

Antwoord 4, autoriteit 5%

Dit is wat ik deed voor het renderen van html-bestanden. En het loste de fouten op.
Installeer consolidate en snor door de onderstaande opdracht uit te voeren in uw projectmap.

$ sudo npm install consolidate mustache --save

En breng de volgende wijzigingen aan in uw app.js-bestand

var engine = require('consolidate');
app.set('views', __dirname + '/views');
app.engine('html', engine.mustache);
app.set('view engine', 'html');

En nu worden html-pagina’s correct weergegeven.


Antwoord 5, autoriteit 3%

Ik denk dat je misschien een view-engine moet declareren.

Als u een weergave-/sjabloon-engine wilt gebruiken:

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

of

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

Maar om plain-html weer te geven, zie dit bericht: Render basic HTML-weergave?.


Antwoord 6, autoriteit 2%

Gebruik

res.sendFile()

in plaats van

res.render().

Wat u probeert te doen is een heel bestand verzenden.

Dit werkte voor mij.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

3 × one =

Other episodes