Визуализировать базовый вид HTML? - PullRequest
266 голосов
/ 25 декабря 2010

У меня есть базовое приложение node.js, которое я пытаюсь использовать с помощью Express Framework.У меня есть папка views, где у меня есть файл index.html.Но я получаю следующую ошибку при загрузке веб-браузера.

Ошибка: не удается найти модуль 'html'

Ниже приведен мой код.

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

Что мне здесь не хватает?

Ответы [ 27 ]

5 голосов
/ 05 июля 2016

Чтобы отобразить HTML-страницу в узле, попробуйте следующее:

app.set('views', __dirname + '/views');

app.engine('html', require('ejs').renderFile);
  • Вам необходимо установить ejs модуль через npm, например:

       npm install ejs --save
    
4 голосов
/ 31 мая 2012

Для своего проекта я создал эту структуру:

index.js
css/
    reset.css
html/
    index.html

Этот код обслуживает index.html для / запросов и reset.css для /css/reset.css запросов. Достаточно просто, и самое приятное то, что он автоматически добавляет заголовки кеша .

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);
3 голосов
/ 20 января 2015

Попробуйте функцию res.sendFile () в экспресс-маршрутах.

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

Читайте здесь: http://codeforgeek.com/2015/01/render-html-file-expressjs/

3 голосов
/ 15 октября 2014

Я добавил ниже 2 строки, и это работает для меня

    app.set('view engine', 'html');
    app.engine('html', require('ejs').renderFile);
3 голосов
/ 03 июня 2016

Я не хотел зависеть от ejs для простой доставки HTML-файла, поэтому я просто написал крошечное средство визуализации:

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 );
} );
3 голосов
/ 17 апреля 2014

В Express 4.0.0 единственное, что вам нужно сделать, это закомментировать 2 строки в app.js:

/* app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade'); */ //or whatever the templating engine is.

и затем перетащить статический файл в каталог / public.Пример: /public/index.html

2 голосов
/ 27 февраля 2014

1) Лучший способ - установить статическую папку. В вашем основном файле (app.js | server.js | ???):

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

публичный / CSS / form.html
общественный / CSS / style.css

Затем вы получили статический файл из «публичной» папки:

http://YOUR_DOMAIN/form.html
http://YOUR_DOMAIN/css/style.css

2)

Вы можете создать свой файловый кеш.
Используйте метод 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"] );                                
};);
2 голосов
/ 27 февраля 2015
res.sendFile(__dirname + '/public/login.html');
2 голосов
/ 06 марта 2014

Я пытался настроить угловое приложение с экспресс-API RESTful и несколько раз попадал на эту страницу, хотя это было бесполезно. Вот что я нашел, что сработало:

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

Тогда в обратном вызове для ваших API-маршрутов будет выглядеть: res.jsonp(users);

Ваш клиентский фреймворк может обрабатывать маршрутизацию. Экспресс для обслуживания API.

Мой домашний маршрут выглядит так:

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)
});
2 голосов
/ 28 ноября 2016

Вот полная демонстрационная версия файла экспресс-сервера!

https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906

надеюсь, это поможет вам!

// 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}!
    `);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...