javascript - tabla - title html
¿Hacer vista básica en HTML? (26)
Tengo una aplicación básica de node.js que estoy intentando despegar con Express framework. Tengo una carpeta de views
donde tengo un archivo index.html
. Pero recibo el siguiente error al cargar el navegador web.
Error: no se puede encontrar el módulo ''html''
A continuación se muestra mi código.
var express = require(''express'');
var app = express.createServer();
app.use(express.staticProvider(__dirname + ''/public''));
app.get(''/'', function(req, res) {
res.render(''index.html'');
});
app.listen(8080, ''127.0.0.1'')
¿Que me estoy perdiendo aqui?
1) La mejor manera es establecer una carpeta estática. En su archivo principal (app.js | server.js | ???):
app.use(express.static(path.join(__dirname, ''public'')));
public / css / form.html
public / css / style.css
Luego tienes un archivo estático de la carpeta "pública":
http://YOUR_DOMAIN/form.html
http://YOUR_DOMAIN/css/style.css
2)
Puedes crear tu caché de archivos.
Utilice el método fs.readFileSync
var cache = {};
cache["index.html"] = fs.readFileSync( __dirname + ''/public/form.html'');
app.get(''/'', function(req, res){
res.setHeader(''Content-Type'', ''text/html'');
res.send( cache["index.html"] );
};);
Añade las siguientes líneas a tu código
Reemplaza "jade" con "ejs" y "XYZ" (versión) con "*" en el archivo package.json
"dependencies": { "ejs": "*" }
Luego, en su archivo app.js, agregue el siguiente Código:
app.engine(''html'', require(''ejs'').renderFile);
app.set(''view engine'', ''html'');
Y recuerde mantener todos los archivos .HTML en la carpeta de vistas
Saludos :)
Agregué debajo de 2 líneas y funcionó para mí.
app.set(''view engine'', ''html'');
app.engine(''html'', require(''ejs'').renderFile);
Con Express 4.0.0, lo único que tienes que hacer es comentar 2 líneas en app.js:
/* app.set(''views'', path.join(__dirname, ''views''));
app.set(''view engine'', ''jade''); */ //or whatever the templating engine is.
Y luego suelte su archivo estático en el directorio / public. Ejemplo: /public/index.html
De la Guía Express.js: Ver Rendering
Los nombres de los archivos de vista toman la forma
Express.ENGINE
, dondeENGINE
es el nombre del módulo que se requerirá. Por ejemplo, la vistalayout.ejs
le dirá al sistema de vista querequire(''ejs'')
, el módulo que se está cargando debe exportar el métodoexports.render(str, options)
para cumplir con Express, sin embargo, se puede usarapp.register()
para asignar motores a extensiones de archivo, de modo que, por ejemplo,foo.html
pueda representarse en jade.
Entonces, o creas tu propio renderizador simple o simplemente usas jade:
app.register(''.html'', require(''jade''));
More sobre app.register
.
Tenga en cuenta que en Express 3, este método cambia de nombre a
app.engine
En server.js, por favor incluya
var express = require("express");
var app = express();
var path = require("path");
app.get(''/'',function(req,res){
res.sendFile(path.join(__dirname+''/index.html''));
//__dirname : It will resolve to your project folder.
});
Estaba intentando configurar una aplicación angular con una API RESTful expresa y aterricé en esta página varias veces, aunque no fue útil. Esto es lo que encontré que funcionó:
app.configure(function() {
app.use(express.static(__dirname + ''/public'')); // set the static files location
app.use(express.logger(''dev'')); // log every request to the console
app.use(express.bodyParser()); // pull information from html in POST
app.use(express.methodOverride()); // simulate DELETE and PUT
app.use(express.favicon(__dirname + ''/public/img/favicon.ico''));
});
Luego, en la devolución de llamada para sus rutas de api se ve como: res.jsonp(users);
Su marco del lado del cliente puede manejar el enrutamiento. Express es para servir a la API.
Mi ruta de inicio se ve así:
app.get(''/*'', function(req, res) {
res.sendfile(''./public/index.html''); // load the single view file (angular will handle the page changes on the front-end)
});
No quería depender de ejs para entregar simplemente un archivo HTML, así que simplemente escribí el pequeño renderizador:
const Promise = require( "bluebird" );
const fs = Promise.promisifyAll( require( "fs" ) );
app.set( "view engine", "html" );
app.engine( ".html", ( filename, request, done ) => {
fs.readFileAsync( filename, "utf-8" )
.then( html => done( null, html ) )
.catch( done );
} );
Normalmente uso este
app.configure(function() {
app.use(express.static(__dirname + ''/web''));
});
Solo ten cuidado porque eso compartirá cualquier cosa en el directorio / web.
Espero que ayude
Para mi proyecto he creado esta estructura:
index.js
css/
reset.css
html/
index.html
Este código sirve index.html para /
solicitudes, y reset.css para solicitudes /css/reset.css
. Bastante simple, y la mejor parte es que agrega automáticamente encabezados de caché .
var express = require(''express''),
server = express();
server.configure(function () {
server.use(''/css'', express.static(__dirname + ''/css''));
server.use(express.static(__dirname + ''/html''));
});
server.listen(1337);
Para representar la página HTML en el nodo, intente lo siguiente:
app.set(''views'', __dirname + ''/views'');
app.engine(''html'', require(''ejs'').renderFile);
Necesitas instalar el módulo
ejs
través denpm
como:npm install ejs --save
Pruebe la función res.sendFile () en las rutas Express.
var express = require("express");
var app = express();
var path = require("path");
app.get(''/'',function(req,res){
res.sendFile(path.join(__dirname+''/index.html''));
//__dirname : It will resolve to your project folder.
});
app.get(''/about'',function(req,res){
res.sendFile(path.join(__dirname+''/about.html''));
});
app.get(''/sitemap'',function(req,res){
res.sendFile(path.join(__dirname+''/sitemap.html''));
});
app.listen(3000);
console.log("Running at Port 3000");
Lea aquí: http://codeforgeek.com/2015/01/render-html-file-expressjs/
Puedes hacer que jade incluya una página HTML simple:
en views / index.jade
include plain.html
en views / plain.html
<!DOCTYPE html>
...
y app.js todavía puede procesar jade:
res.render(index)
Quería permitir que las solicitudes a "/" fueran manejadas por una ruta Express donde anteriormente habían sido manejadas por el middleware estático. Esto me permitiría renderizar la versión regular de index.html o una versión que cargó JS y CSS concatenados y minimizados, dependiendo de la configuración de la aplicación. Inspirado por la respuesta de Andrew Homeyer , decidí arrastrar mis archivos HTML, sin modificar, a una carpeta de vistas, configurar Express como tal
app.engine(''html'', swig.renderFile);
app.set(''view engine'', ''html'');
app.set(''views'', __dirname + ''/views'');
Y creó un controlador de ruta como tal.
app.route(''/'')
.get(function(req, res){
if(config.useConcatendatedFiles){
return res.render(''index-dist'');
}
res.render(''index'');
});
Esto funcionó bastante bien.
Si está utilizando express@~3.0.0, cambie la línea a continuación de su ejemplo:
app.use(express.staticProvider(__dirname + ''/public''));
a algo como esto:
app.set("view options", {layout: false});
app.use(express.static(__dirname + ''/public''));
Lo hice como se describe en la página de api express y funciona como encanto. Con esa configuración, no tiene que escribir código adicional para que sea lo suficientemente fácil de usar para su microproducción o prueba.
Código completo enumerado a continuación:
var express = require(''express'');
var app = express.createServer();
app.set("view options", {layout: false});
app.use(express.static(__dirname + ''/public''));
app.get(''/'', function(req, res) {
res.render(''index.html'');
});
app.listen(8080, ''127.0.0.1'')
Si está utilizando Express Framework para node.js
instalar npm ejs
luego agrega el archivo de configuración
app.set(''port'', process.env.PORT || 3000);
app.set(''views'', __dirname + ''/views'');
app.set(''view engine'', ''ejs'');
app.set(''view engine'', ''jade'');
app.use(express.favicon());
app.use(express.logger(''dev''));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router)
;
haga que la página del módulo export.form.js tenga el archivo html en el directorio de vistas con la extensión del nombre del archivo ejs como form.html.ejs
luego crea el form.js
res.render(''form.html.ejs'');
Si no tiene que usar el directorio de vistas , simplemente mueva los archivos html al directorio público a continuación.
y luego, agregue esta línea en app.configure en lugar de ''/ views''.
server.use(express.static(__dirname + ''/public''));
También enfrenté el mismo problema en express 3.X
y el node 0.6.16
. La solución anterior no funcionará para la última versión de express 3.x
app.register
método app.register
y agregaron el método app.engine
. Si probó la solución anterior, puede terminar con el siguiente error.
node.js:201
throw e; // process.nextTick error, or ''error'' event on first tick
^
TypeError: Object function app(req, res){ app.handle(req, res); } has no method ''register''
at Function.<anonymous> (/home/user1/ArunKumar/firstExpress/app.js:37:5)
at Function.configure (/home/user1/ArunKumar/firstExpress/node_modules/express/lib/application.js:399:61)
at Object.<anonymous> (/home/user1/ArunKumar/firstExpress/app.js:22:5)
at Module._compile (module.js:441:26)
at Object..js (module.js:459:10)
at Module.load (module.js:348:31)
at Function._load (module.js:308:12)
at Array.0 (module.js:479:10)
at EventEmitter._tickCallback (node.js:192:40)
Para deshacerse del mensaje de error. Agregue la siguiente línea a su app.configure function
app.engine(''html'', require(''ejs'').renderFile);
Nota: tienes que instalar el motor de plantillas ejs
npm install -g ejs
Ejemplo:
app.configure(function(){
.....
// disable layout
app.set("view options", {layout: false});
app.engine(''html'', require(''ejs'').renderFile);
....
app.get(''/'', function(req, res){
res.render("index.html");
});
Nota: la solución más sencilla es usar la plantilla ejs como motor de visualización. Allí puede escribir código HTML en * .ejs ver archivos.
También puedes leer el archivo html y enviarlo.
app.get(''/'', function(req, res) {
fs.readFile(__dirname + ''/public/index.html'', ''utf8'', function(err, text){
res.send(text);
});
});
prueba esto. esto funciona para mi.
app.configure(function(){
.....
// disable layout
app.set("view options", {layout: false});
// make a custom html template
app.register(''.html'', {
compile: function(str, options){
return function(locals){
return str;
};
}
});
});
....
app.get(''/'', function(req, res){
res.render("index.html");
});
Aquí hay una demo completa del servidor Express!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
Espero que te ayude!
// simple express server for HTML pages!
// ES6 style
const express = require(''express'');
const fs = require(''fs'');
const hostname = ''127.0.0.1'';
const port = 3000;
const app = express();
let cache = [];// Array is OK!
cache[0] = fs.readFileSync( __dirname + ''/index.html'');
cache[1] = fs.readFileSync( __dirname + ''/views/testview.html'');
app.get(''/'', (req, res) => {
res.setHeader(''Content-Type'', ''text/html'');
res.send( cache[0] );
});
app.get(''/test'', (req, res) => {
res.setHeader(''Content-Type'', ''text/html'');
res.send( cache[1] );
});
app.listen(port, () => {
console.log(`
Server is running at http://${hostname}:${port}/
Server hostname ${hostname} is listening on port ${port}!
`);
});
Muchas de estas respuestas están desactualizadas.
Usando Express 3.0.0 y 3.1.0, los siguientes trabajos:
app.set(''views'', __dirname + ''/views'');
app.engine(''html'', require(''ejs'').renderFile);
Consulte los comentarios a continuación para conocer la sintaxis alternativa y las advertencias para Express 3.4+:
app.set(''view engine'', ''ejs'');
Entonces puedes hacer algo como:
app.get(''/about'', function (req, res)
{
res.render(''about.html'');
});
Esto supone que tiene sus vistas en la subcarpeta de views
y que ha instalado el módulo de nodo ejs
. Si no, ejecuta lo siguiente en una consola Node:
npm install ejs --save
estructura de carpetas:
.
├── index.html
├── node_modules
│ ├──{...}
└── server.js
server.js
var express = require(''express'');
var app = express();
app.use(express.static(''./''));
app.get(''/'', function(req, res) {
res.render(''index.html'');
});
app.listen(8882, ''127.0.0.1'')
index.html
<!DOCTYPE html>
<html>
<body>
<div> hello world </div>
</body>
</html>
salida:
Hola Mundo
app.get(''/'', function (req, res) {
res.sendfile(__dirname + ''/public/index.html'');
});
app.get(''/'', function(req, res, next) {
res.send(`<html><body><h1>My Server</h1></body></html>'')
});
res.sendFile(__dirname + ''/public/login.html'');