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.