แสดงมุมมอง HTML พื้นฐานหรือไม่


279

ฉันมีแอพพื้นฐาน node.js ที่ฉันพยายามจะลงมือทำโดยใช้เฟรมเวิร์ก Express ฉันมี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')

ฉันหายไปนี่อะไร

คำตอบ:


298

คุณสามารถมีหยกรวมถึงหน้า HTML ธรรมดา:

ใน views / index.jade

include plain.html

ใน views / plain.html

<!DOCTYPE html>
...

และ app.js ยังสามารถแสดงหยกได้:

res.render(index)

1
เพิ่งทราบว่าสิ่งที่ฉันต้องการคือการให้บริการไฟล์. html เพียงไฟล์เดียวเพราะแอปของฉันเป็นหน้าเดียว;)
diosney

1
เราสามารถรวมหน้า HTML / JS หลายหน้าเข้ากับวิธีนี้ได้หรือไม่?
user3398326

6
คุณไม่ควรที่จะแสดงหน้า html นั้นโดยไม่มีแม่แบบหยกสำหรับการทดสอบเบื้องต้นในการเริ่มต้นด่วนหรือไม่
PositiveGuy

1
ดังนั้นเราต้องสร้างแม่แบบหยกสำหรับไฟล์ HTML แต่ละไฟล์ของเราหรือไม่
คริส - จูเนียร์

4
แฮ็คมากกว่าทางออก
Ozil

226

คำตอบเหล่านี้จำนวนมากล้าสมัย

ใช้ express 3.0.0 และ 3.1.0 ได้ผลดังต่อไปนี้:

app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

ดูความคิดเห็นด้านล่างสำหรับทางเลือกไวยากรณ์และคำเตือนสำหรับ express 3.4+:

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

จากนั้นคุณสามารถทำสิ่งที่ชอบ:

app.get('/about', function (req, res)
{
    res.render('about.html');
});

สิ่งนี้จะถือว่าคุณมีมุมมองของคุณในviewsโฟลเดอร์ย่อยและคุณได้ติดตั้งejsโมดูลโหนด ถ้าไม่ใช่ให้รันสิ่งต่อไปนี้บนคอนโซลโหนด:

npm install ejs --save

@MichaelDausmann ไชโยฉันได้รวมข้อมูลนั้นไว้ในคำตอบแล้ว
Drew Noakes

เหตุใด res.render จึงต้องการนามสกุล. html ในกรณีนี้ แต่ไม่ใช่ในกรณีเริ่มต้นด้วย Jade ด้วยรหัสสำเร็จรูปมันก็เรียก res.render ('ดัชนี', {ชื่อ: 'ด่วน'}); แต่ที่นี่คือ: res.render ('about.html');
วิชชา

6
ด้วย Express 3.4.2: app.set ('ดูเอนจิ้น', 'ejs');
roland

3
คุณควรใช้คำสั่ง 'npm install ejs --save' เพื่ออัพเดท package.json ของคุณ
Tom Teman

8
ทำไมคุณต้องการ ejs
PositiveGuy

71

จากคำแนะนำ Express.js: ดูการแสดงผล

ดูชื่อไฟล์ในแบบฟอร์มExpress.ENGINEโดยที่ENGINEเป็นชื่อของโมดูลที่จะต้องใช้ ตัวอย่างเช่นมุมมองlayout.ejsจะบอกระบบมุมมองrequire('ejs')โมดูลที่กำลังโหลดจะต้องส่งออกวิธีการexports.render(str, options)ที่สอดคล้องกับ Express อย่างไรก็ตามapp.register()สามารถใช้ในการแมปเอ็นจิ้นไปยังนามสกุลไฟล์เพื่อให้ตัวอย่างfoo.htmlสามารถแสดงผลโดย jade

ดังนั้นไม่ว่าคุณจะสร้าง renderer แบบง่าย ๆ ของคุณเองหรือคุณแค่ใช้ jade:

 app.register('.html', require('jade'));

เพิ่มเติมapp.registerเกี่ยวกับ

โปรดทราบว่าใน Express 3 วิธีนี้จะถูกเปลี่ยนชื่อ app.engine


57
Note- app.register ได้เปลี่ยนชื่อเป็น app.engine ใน Express 3
Spongeboy

8
ดูคำตอบจาก Andrew Homeyer มันเป็นคำตอบที่แท้จริง
David Betz

7
จากคำตอบอื่น ๆ สำหรับ Express 4 ฉันลงเอยด้วยการใช้app.engine('.html', require('ejs').renderFile);
CrazyPyro

ใน express 4 คุณสามารถใช้: app.set ('view engine', 'jade');
Daniel Huang

48

คุณสามารถอ่านไฟล์ HTML และส่งมันได้:

app.get('/', (req, res) => {
    fs.readFile(__dirname + '/public/index.html', 'utf8', (err, text) => {
        res.send(text);
    });
});

23
วิธีนี้ไม่ดีเพราะไม่มีการแคชไฟล์ มันถูกอ่านสำหรับทุกคำขอ
Marcel Falliere

2
มันอาจจะง่ายต่อการแคชด้วยตนเอง เพียงเก็บตัวแปรอ่านไฟล์และอ่านอีกครั้งหากตัวแปรนั้นว่างเปล่า คุณยังสามารถใช้วัตถุ JS และเก็บไฟล์ต่าง ๆ ในตัวแปรต่าง ๆ พร้อมประทับเวลา แน่นอนว่ามันใช้งานได้ดีกว่าที่คนส่วนใหญ่ทำ แต่มันก็ดีสำหรับคนที่ยังใหม่กับโหนด เป็นเรื่องง่ายที่จะเข้าใจ
Naman Goel

5
Yikes สิ่งนี้เอาชนะจุดทั้งหมดของสถาปัตยกรรมที่เน้นไปที่การประชุมที่เน้นความคล่องตัว (เช่น MVC)
David Betz

@MarcelFalliere คุณคิดว่าเขาต้องการแคชไฟล์หรือว่าเขาไม่ต้องการใช้โซลูชันแคชที่กำหนดเอง ขอบคุณ keegan3d สำหรับคำตอบ
Benny

@MarcelFalliere แล้วทางออกที่ถูกต้องคืออะไร? ฉันเห็นคำตอบอื่น ๆ ที่ต้องพึ่งพาการอ้างอิงใหม่ จำเป็นหรือไม่ที่จะต้องใช้ไฟล์ html
JCarlosR

45

ลองนี้ มันใช้งานได้สำหรับฉัน

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

2
มีปัญหากับการกำหนดค่าที่แน่นอนด้านบนดังนั้นฉันจึงลบจุดออกจาก ".html" และเพิ่มสิ่งนี้: app.set ('ดูเอ็นจิ้น', 'html'); app.set ('views', __dirname + '/ views'); สำหรับการเรนเดอร์ที่สมบูรณ์แบบ
Bijou Trouvaille

8
นี่เป็นเรื่องแปลก ... คุณควรทำหน้าที่เป็น html เป็นไฟล์คงที่ สิ่งนี้ยังช่วยให้คุณได้รับประโยชน์จากการแคชที่ดีขึ้น การสร้าง "คอมไพเลอร์ html" แบบกำหนดเองดูเหมือนจะผิด หากคุณต้องการส่งไฟล์จากภายในเส้นทาง (ซึ่งคุณไม่จำเป็นต้องทำมาก) เพียงแค่อ่านและส่ง มิฉะนั้นเพียงเปลี่ยนเส้นทางไปยัง html คงที่
enyo

2
@ ทุกความคิดเห็นนี้ดูแปลก ๆ การพิจารณาว่าจะทำอย่างไรในสิ่งที่คุณพูดควรทำคือคำถามที่ถูกถามและคำตอบของคุณคือทำ คุณให้บริการ html แบบคงที่ด้วยการแคชได้อย่างไร
Kyeotic

3
app.registerผมเห็นข้อผิดพลาดใน บางทีมันเลิกใช้แล้วใน express 3.0.0.rc3? TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
Drew Noakes

1
@enyo คุณพลาดจุดที่มีสถาปัตยกรรมแบบ Steam แล้ว เมื่อรูปแบบคือคอนโทรลเลอร์ / มุมมอง (หรือ / โปรเซสเซอร์ / มุมมองสถาปัตยกรรมเฉพาะของคุณ) คุณจะไม่สามารถเบี่ยงเบนจากรูปแบบดังกล่าวด้วยส่วนขยายที่ล้าสมัย คุณต้องถือว่า HTML ของคุณเป็นเนื้อหาที่แสดงผลเหมือนอย่างอื่น เก็บไว้แห้งเพื่อน
David Betz

22
app.get('/', function (req, res) {
res.sendfile(__dirname + '/public/index.html');
});

5
sendfile ไม่ใช่แคชในโหมดการผลิตดังนั้นนี่ไม่ใช่ทางออกที่ดี
Teo Choong Ping

1
@SeymourCakes กรุณาแก้ไขให้ฉันถ้าฉันผิด แต่ฉันคิดว่า sendFile ตอนนี้รองรับการแคช: devdocs.io/express/index#res.sendFile
KhoPhi

19

หากคุณใช้express@~3.0.0 ให้เปลี่ยนบรรทัดด้านล่างจากตัวอย่างของคุณ:

app.use(express.staticProvider(__dirname + '/public'));

เพื่อสิ่งนี้:

app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));

ฉันทำมันตามที่อธิบายไว้ในหน้า Express apiและมันใช้งานได้อย่างมีเสน่ห์ ด้วยการตั้งค่านั้นคุณไม่จำเป็นต้องเขียนรหัสเพิ่มเติมดังนั้นจึงเป็นเรื่องง่ายพอที่จะใช้สำหรับการผลิตขนาดเล็กหรือการทดสอบของคุณ

รหัสเต็มรายการด้านล่าง:

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

1
ทำไมคุณทำซ้ำapp.use(express.static(__dirname + '/public'));หลังจากที่คุณเริ่มเซิร์ฟเวอร์ด้วยapp.listen?
fatuhoku

2
อะไรคือความแตกต่างของการแสดงหน้า html ที่เป็นแบบคงที่และเพิ่งโหลดแบบคงที่กับแบบด่วน
PositiveGuy

14

ฉันยังต้องเผชิญกับปัญหาเดียวกันในและexpress 3.X วิธีการแก้ปัญหาดังกล่าวข้างต้นได้รับจะไม่ทำงานสำหรับรุ่นล่าสุดnode 0.6.16 express 3.xพวกเขาลบapp.registerวิธีการและapp.engineวิธีการเพิ่ม หากคุณลองวิธีการแก้ปัญหาข้างต้นคุณอาจพบข้อผิดพลาดดังต่อไปนี้

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)

เพื่อกำจัดข้อความแสดงข้อผิดพลาด เพิ่มบรรทัดต่อไปนี้ในapp.configure function

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

หมายเหตุ: คุณต้องติดตั้งejsแม่แบบเอ็นจิ้น

npm install -g ejs

ตัวอย่าง:

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

หมายเหตุ:ทางออกที่ง่ายที่สุดคือการใช้เทมเพลต ejs เป็นวิวเอ็นจิน คุณสามารถเขียน HTML แบบ raw ใน * .ejs ดูไฟล์ได้


3
คุณต้องติดตั้งejsทั่วโลกหรือไม่?
Drew Noakes

มันบอกฉันว่ามันหาไฟล์ 'index.html' ไม่ได้
MetaGuru

9

โครงสร้างโฟลเดอร์:

.
├── 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>

เอาท์พุท:

สวัสดีชาวโลก


7

หากคุณไม่จำเป็นต้องใช้ไดเรกทอรีมุมมองเพียงแค่ย้ายไฟล์ html ไปยังสาธารณะไดเรกทอรีด้านล่าง

จากนั้นเพิ่มบรรทัดนี้ลงใน app.configure แทน '/ views'

server.use (express.static (__ dirname + '/ public'));

5

หากต้องการแสดงผลหน้า Html ในโหนดให้ลองดังต่อไปนี้

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

app.engine('html', require('ejs').renderFile);
  • คุณต้องติดตั้งejsโมดูลผ่านnpmlike:

       npm install ejs --save

วิธีนี้ใช้ได้ผลสำหรับฉัน แม้ว่าฉันจะลองตัวเลือกคงที่เช่นกัน คุณช่วยอธิบายกลไกเบื้องหลังมันได้ไหม ขอบคุณ!
harshad

4

สำหรับโครงการของฉันฉันได้สร้างโครงสร้างนี้:

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

1) วิธีที่ดีที่สุดคือตั้งโฟลเดอร์แบบคงที่ ในไฟล์หลักของคุณ (app.js | server.js | ???):

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

public / css / form.html
public / 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"] );                                
};);

ไม่เลว! นี่คือตัวอย่างไฟล์ที่สมบูรณ์! https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
xgqfrms

3

ด้วย 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


3

ฉันเพิ่มด้านล่าง 2 บรรทัดและมันใช้ได้สำหรับฉัน

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

มันทำให้ฉันข้อผิดพลาด "ข้อผิดพลาด: ไม่สามารถหาโมดูล 'ejs' ที่ Function.Module._resolveFilename (module.js: 338: 15) ที่ Function.Module._load (module.js: 280: 25) ที่ Module.require ( module.js: 364: 17) ที่ต้องการ (module.js: 380: 17) "
Lygub Org

@LygubOrg ทำงานnpm install ejs --saveในไดเรกทอรีทำงานของคุณ
A1rPun

1
จำเป็นต้องเพิ่มการพึ่งพาเฉพาะกับไฟล์ html หรือไม่
JCarlosR

3

ลอง 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

ฉันไม่ต้องการพึ่ง ejs เพียงแค่ส่งไฟล์ HTML ดังนั้นฉันก็แค่เขียน renderer ตัวเล็ก ๆ เอง:

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

2

ฉันพยายามตั้งค่าแอพเชิงมุมด้วย RESTful API แบบด่วนและลงจอดบนหน้านี้หลายครั้งแม้ว่ามันจะไม่เป็นประโยชน์ นี่คือสิ่งที่ฉันพบว่าใช้งานได้:

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

เฟรมเวิร์กฝั่งไคลเอ็นต์ของคุณสามารถจัดการการจัดเส้นทาง Express ใช้สำหรับการให้บริการ 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

นี่คือตัวอย่างไฟล์ด่วนของเซิร์ฟเวอร์ด่วน!

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}!
    `);
});


1

เพิ่มบรรทัดต่อไปนี้ในรหัสของคุณ

  1. แทนที่ "jade" ด้วย "ejs" & "XYZ" (เวอร์ชั่น) ด้วย "*" ในไฟล์ package.json

      "dependencies": {
       "ejs": "*"
      }
  2. จากนั้นในไฟล์ app.js ของคุณเพิ่มรหัสต่อไปนี้:

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

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

  3. และจดจำไฟล์. HTML ทั้งหมดในมุมมองโฟลเดอร์

ไชโย :)


1

สำหรับ html ธรรมดาคุณไม่จำเป็นต้องมีแพ็คเกจหรือมิดเดิลแวร์ใด ๆ

เพียงใช้สิ่งนี้:

app.get('/', function(req, res) {
    res.sendFile('index.html');
});

1

เป็นเรื่องน่าเศร้าที่ประมาณปี 2020 ยังคงมีการแสดงออกยังไม่ได้เพิ่มวิธีการแสดงหน้า HTML โดยไม่ต้องใช้sendFileวิธีการของresponseวัตถุ การใช้sendFileไม่ใช่ปัญหา แต่ผ่านการโต้แย้งในรูปแบบของการpath.join(__dirname, 'relative/path/to/file')รู้สึกไม่ถูกต้อง ทำไมผู้ใช้ควรเข้าร่วม__dirnameกับเส้นทางของไฟล์ มันควรจะทำตามค่าเริ่มต้น ทำไมรากของเซิร์ฟเวอร์ไม่สามารถกำหนดค่าไดเรกทอรีโครงการได้ นอกจากนี้การติดตั้งการสร้างเท็มเพลตแบบพึ่งพาเพื่อแสดงไฟล์ HTML แบบคงที่นั้นไม่ถูกต้องอีกครั้ง ฉันไม่ทราบวิธีที่ถูกต้องในการแก้ไขปัญหา แต่ถ้าฉันต้องใช้ HTML แบบคงที่ฉันจะทำสิ่งต่อไปนี้:

const PORT = 8154;

const express = require('express');
const app = express();

app.use(express.static('views'));

app.listen(PORT, () => {
    console.log(`Server is listening at port http://localhost:${PORT}`);
});

ตัวอย่างข้างต้นถือว่าโครงสร้างโครงการมีviewsไดเรกทอรีและไฟล์ HTML แบบคงที่อยู่ข้างใน ตัวอย่างเช่นสมมติว่าที่viewsไดเรกทอรีมีสองไฟล์ HTML ชื่อindex.htmlและabout.htmlจากนั้นในการเข้าถึงพวกเขาเราสามารถเข้าชม: localhost:8153/index.htmlหรือเพียงแค่localhost:8153/โหลดindex.htmlหน้าเว็บและโหลดlocalhost:8153/about.html about.htmlเราสามารถใช้วิธีที่คล้ายกันในการให้บริการแอพตอบโต้ / เชิงมุมโดยจัดเก็บสิ่งประดิษฐ์ในviewsไดเรกทอรีหรือเพียงแค่ใช้dist/<project-name>ไดเรกทอรีเริ่มต้นและกำหนดค่าในเซิร์ฟเวอร์ js ดังต่อไปนี้:

app.use(express.static('dist/<project-name>'));

0

ฉันต้องการอนุญาตให้คำขอ "/" ได้รับการจัดการโดยเส้นทางด่วนซึ่งก่อนหน้านี้พวกเขาได้รับการจัดการโดยมิดเดิ้ลสแตติก สิ่งนี้จะทำให้ฉันสามารถแสดงดัชนีปกติของ index.html หรือเวอร์ชันที่โหลดการตัดแบ่ง + JS และ CSS แบบย่อซึ่งขึ้นอยู่กับการตั้งค่าแอปพลิเคชัน แรงบันดาลใจจากคำตอบของ Andrew Homeyerฉันตัดสินใจลากไฟล์ HTML ของฉัน - ไม่ได้แก้ไข - ลงในโฟลเดอร์มุมมองกำหนดค่า Express อย่างนั้น

   app.engine('html', swig.renderFile);
   app.set('view engine', 'html');
   app.set('views', __dirname + '/views');  

และสร้างตัวจัดการเส้นทางเช่นนั้น

 app.route('/')
        .get(function(req, res){
            if(config.useConcatendatedFiles){
                return res.render('index-dist');
            }
            res.render('index');       
        });

วิธีนี้ใช้ได้ผลดีทีเดียว


0

ใน server.js โปรดระบุ

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

0

หากคุณพยายามที่จะให้บริการไฟล์ HTML ที่มีเนื้อหาทั้งหมดอยู่ข้างในนั้นก็ไม่จำเป็นต้อง 'เรนเดอร์' มันก็แค่ต้อง 'เสริฟ' การแสดงผลคือเมื่อคุณอัปเดตเซิร์ฟเวอร์หรือฉีดเนื้อหาก่อนที่หน้าจะถูกส่งไปยังเบราว์เซอร์และต้องมีการอ้างอิงเพิ่มเติมเช่น ejs ดังที่คำตอบอื่น ๆ แสดง

หากคุณต้องการนำเบราว์เซอร์ไปยังไฟล์ตามคำขอของพวกเขาคุณควรใช้res.sendFile ()ดังนี้:

const express = require('express');
const app = express();
var port = process.env.PORT || 3000; //Whichever port you want to run on
app.use(express.static('./folder_with_html')); //This ensures local references to cs and js files work

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/folder_with_html/index.html');
});

app.listen(port, () => console.log("lifted app; listening on port " + port));

วิธีนี้คุณไม่ต้องการการพึ่งพาเพิ่มเติมนอกเหนือจากการด่วน หากคุณต้องการให้เซิร์ฟเวอร์ส่งไฟล์ html ที่สร้างขึ้นของคุณไปแล้วข้างต้นเป็นวิธีที่มีน้ำหนักเบามาก


0

index.js

var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));


app.get('/', function(req, res) {
    res.render('index.html');
});


app.listen(3400, () => {
    console.log('Server is running at port 3400');
})

วางไฟล์ index.html ของคุณในโฟลเดอร์สาธารณะ

<!DOCTYPE html>
<html>
<head>
    <title>Render index html file</title>
</head>
<body>
    <h1> I am from public/index.html </h1>
</body>
</html>

ตอนนี้เรียกใช้รหัสต่อไปนี้ใน terminal ของคุณ

node index.js


-1

ฉันมักจะใช้สิ่งนี้

app.configure(function() {
    app.use(express.static(__dirname + '/web'));
});

แค่ระวังเพราะมันจะแบ่งปันอะไรในสารบบเว็บ /

ฉันหวังว่ามันจะช่วย


-2

ถ้าคุณใช้ express framework ไปที่ node.js

ติดตั้ง npm ejs

จากนั้นเพิ่มไฟล์กำหนดค่า

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)

;

แสดงหน้าจากโมดูลส่งออก form.js มีไฟล์ html ในมุมมอง dir ที่มีนามสกุลของชื่อไฟล์ ejs เป็น form.html.ejs

จากนั้นสร้าง form.js

res.render('form.html.ejs');


ระเบียบนี้คืออะไร?
Vighnesh Raut
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.