2017-05-14 1 views
-2

Ich habe eine mean-stack Anwendung. Unter https://localhost:3000/#/home lautet es views/index.ejs. Hier ist die Einstellung in app.js:Verwenden Sie "index.html" statt "index.ejs"

var app = express(); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.all('/*', function(req, res, next) { 
    res.sendFile('index.ejs', { root: __dirname }); 
}); 

Eigentlich habe ich die Funktion nicht von ejs in index.ejs verwenden. So, jetzt möchte ich nur eine index.html anstatt index.ejs verwenden.

Ich legte den Inhalt von index.ejs in public/htmls/index.html und views/index.html. Und hier ist die aktuelle Einstellung in app.js:

var app = express(); 
// app.set('views', path.join(__dirname, 'views')); 
// app.set('view engine', 'ejs'); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.all('/*', function(req, res, next) { 
    res.sendFile('index.html', { root: __dirname }); 
    // res.sendFile('index.html'); // does not work either 
}); 

Allerdings läuft https://localhost:3000/#/home kehrt

Error: No default engine was specified and no extension was provided. 

Weiß jemand, wie man es beheben?

Edit 1:, indem Sie die Antwort von user818510, versuchte ich res.sendFile('index.html', { root: path.join(__dirname, 'views') }); in app.js, ist es noch nicht index.html finden.

Während in routes/index.js das Folgende index.html finden kann, aber es gibt eine Warnung express deprecated res.sendfile: Use res.sendFile instead routes/index.js:460:9.

var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 
... ... 
router.get('*', function(req, res) { 
    res.sendfile('./views/index.html'); // works, but a deprecation warning 
    // res.sendFile('index.html', { root: path.join(__dirname, 'views') }); does not work 
}); 

Es ist wirklich verwirrend ...

+0

Wenn Sie ejs nicht verwenden möchten und nur html verwenden möchten, versuchen Sie, diese Dateien als statischen Inhalt zu liefern – Santosh

+0

Versuchen Sie 'app.set ('view engine', 'html')' .. Entschuldigung, hier ist der Link http://stackoverflow.com/questions/17911228/how-doi-i-use-html-as-the-view-engine-in-express – Santosh

+0

Es gibt 'Fehler: Kann Modul 'html' nicht finden' – SoftTimur

Antwort

-2

Sie dienen nicht statische Inhalte von einem Anwendungsserver.

Verwenden Sie einen Webserver für diese und in der Produktion ein Content-Delivery-Netzwerk wie Akamai.

Ein Content-Delivery-Netzwerk belastet Sie pro Bandbreite (z. B. 10 Cent pro Terabyte). Mit dem Gegenwert von 10 Cent in Akamai können Sie Tausende von Dollar mit Cloud-Instanzen kosten.

Zusätzlich werden Ihre Server unnötig belastet.

Wenn Sie unbedingt statischen Inhalt von Ihren Anwendungsservern bereitstellen müssen, dann legen Sie einen Reverse-Proxy-Cache wie Nginx, Lack oder Tintenfisch vor Ihrem Server. Aber das wird immer noch sehr kostenineffizient sein. Dies ist in der express website dokumentiert.

Dies ist in jeder Internet-Firma üblich.

1

Wenn es eine einzelne Seite Anwendung bedeutet ist, dann müssen Sie nur ausdrücken mit statischen starten und setzen index.html in static/ dir:

Projekt Layout

static/ 
    index.html 
server.js 

Server.js

'use strict'; 

var express = require('express'); 

var app = express(); 
app.use(express.static('public')); 

var server = app.listen(8888, function() { 
    console.log("Server started. Listening on port %s", server.address().port); 
}); 

Jetzt können Sie http://localhost:8888/#home

+0

Danke, aber ich will nicht '#' ... – SoftTimur

+1

Es ist nur ein Beispiel ... Jede URL kann angerufen werden. Die Verwendung von '#' oder nicht liegt bei Ihnen, Mit angularjs heißt es html5mode https://scotch.io/tutorials/pretty-urls-in-angularjs-removing-the-hashtag –

0

nennen Es sieht aus wie ein Problem mit dem Pfad. Ihr index.html befindet sich unter public/htmls/index.html und views/index.html. Ihre root Option in res.sendFile sollte __dirname + /public/htmls/ oder __dirname + /views

In Ihrem Code, mit dem Sie den Pfad:

res.sendFile('index.html', { root: __dirname }); 

Ihre app.js würde im Projektstamm, wo Sie public Verzeichnis neben haben bei das gleiche Niveau. Basierend auf Ihrer root Option in res.sendFile, müssten Sie index.html auf der gleichen Ebene wie Ihre app.js platzieren.

Sie sollten den Stammpfad in res.sendFile ändern. Verwendung:

res.sendFile('index.html', { root: path.join(__dirname, 'public', 'htmls') }); 

ODER

res.sendFile('index.html', { root: path.join(__dirname, 'views') }); 

die oben root basiert auf dem Pfad, den Sie in Ihrer Frage erwähnt haben.

Hier ist der Link zu der Dokumentation: http://expressjs.com/en/api.html#res.sendFile

Ihr kein Standard-Engine Fehler ist wahrscheinlich, weil Sie die Zeile kommentiert haben, wo Sie die Ansicht Motor ejs gesetzt, aber nach wie vor bestehenden ejs Blick. Wenn Sie diese Zeile mit der Änderung des Stammpfads abheben, sollte das Problem behoben sein.

+0

Vielen Dank ... bitte sehen Sie meine ** edit 1 ** ... – SoftTimur

+0

@SoftTimur Funktioniert es, wenn Sie die Option 'root' in' res.sendFile' entfernen und den absoluten Pfad für 'index.html' angeben? – user818510

+0

'res.sendFile ('./ views/index.html')' und 'res.sendfile ('./ views/index.html')' geben einen '404' Fehler zurück. – SoftTimur

Verwandte Themen