Saya memiliki aplikasi node.js dasar yang saya coba turunkan menggunakan kerangka Express. Saya memiliki views
folder tempat saya memiliki index.html
file. Tapi saya menerima kesalahan berikut saat memuat browser web.
Kesalahan: Tidak dapat menemukan modul 'html'
Di bawah ini adalah kode saya.
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')
Apa yang kulewatkan di sini?
Banyak dari jawaban ini sudah ketinggalan zaman.
Menggunakan express 3.0.0 dan 3.1.0, yang berikut ini berfungsi:
Lihat komentar di bawah untuk sintaks alternatif dan peringatan untuk express 3.4+:
Maka Anda dapat melakukan sesuatu seperti:
Ini mengasumsikan Anda memiliki pandangan Anda di
views
subfolder, dan bahwa Anda telah menginstalejs
modul node. Jika tidak, jalankan berikut ini di konsol Node:sumber
Dari Panduan Express.js: Lihat Rendering
Jadi baik Anda membuat penyaji sederhana Anda sendiri atau Anda hanya menggunakan jade:
Lebih tentang
app.register
.sumber
app.engine('.html', require('ejs').renderFile);
Anda juga dapat membaca file HTML dan mengirimkannya:
sumber
coba ini. ini bekerja untuk saya.
sumber
app.register
. Mungkin sudah tidak digunakan lagi di express 3.0.0.rc3?TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
sumber
Jika Anda menggunakan express@~3.0.0 ubah baris di bawah ini dari contoh Anda:
untuk sesuatu seperti ini:
Saya membuatnya seperti yang dijelaskan pada halaman api ekspres dan berfungsi seperti pesona. Dengan pengaturan itu, Anda tidak perlu menulis kode tambahan sehingga cukup mudah digunakan untuk produksi atau pengujian mikro Anda.
Kode lengkap tercantum di bawah ini:
sumber
app.use(express.static(__dirname + '/public'));
setelah Anda memulai serverapp.listen
?Saya juga menghadapi masalah yang sama di
express 3.X
dannode 0.6.16
. Solusi yang diberikan di atas tidak akan berfungsi untuk versi terbaruexpress 3.x
. Mereka menghapusapp.register
metode dan menambahkanapp.engine
metode. Jika Anda mencoba solusi di atas, Anda mungkin berakhir dengan kesalahan berikut.Untuk menghilangkan pesan kesalahan. Tambahkan baris berikut ke
app.configure function
Catatan: Anda harus menginstal
ejs
mesin templateContoh:
Catatan: Solusi paling sederhana adalah dengan menggunakan template ejs sebagai view engine. Di sana Anda dapat menulis HTML mentah di file tampilan * .ejs.
sumber
ejs
secara global?struktur folder:
server.js
index.html
keluaran:
Halo Dunia
sumber
Jika Anda tidak harus menggunakan direktori views , Cukup pindahkan file html ke direktori publik di bawah ini.
dan kemudian, tambahkan baris ini ke app.configure alih-alih '/ views'.
sumber
Untuk membuat halaman Html di node coba yang berikut ini,
Anda perlu menginstal
ejs
modul melaluinpm
seperti:sumber
Untuk proyek saya, saya telah membuat struktur ini:
Kode ini melayani index.html untuk
/
permintaan, dan reset.css untuk/css/reset.css
permintaan. Cukup sederhana, dan bagian terbaiknya adalah secara otomatis menambahkan header cache .sumber
1) Cara terbaik adalah mengatur folder statis. Di file utama Anda (app.js | server.js | ???):
public / css / form.html
public / css / style.css
Maka Anda mendapat file statis dari folder "publik":
2)
Anda dapat membuat cache file Anda.
Gunakan metode fs.readFileSync
sumber
Dengan Express 4.0.0, satu-satunya hal yang harus Anda lakukan adalah mengomentari 2 baris di app.js:
Dan kemudian jatuhkan file statis Anda ke direktori / publik. Contoh: /public/index.html
sumber
Saya menambahkan di bawah 2 baris dan berfungsi untuk saya
sumber
npm install ejs --save
di direktori kerja Anda.Coba fungsi res.sendFile () di rute Express.
Baca di sini: http://codeforgeek.com/2015/01/render-html-file-expressjs/
sumber
Saya tidak ingin bergantung pada ejs hanya untuk mengirimkan file HTML, jadi saya sendiri yang menulis renderer kecil:
sumber
Saya mencoba menyiapkan aplikasi bersudut dengan API RESTful yang cepat dan mendarat di halaman ini beberapa kali meskipun itu tidak membantu. Inilah yang saya temukan yang berhasil:
Kemudian dalam panggilan balik untuk rute api Anda terlihat seperti:
res.jsonp(users);
Kerangka kerja sisi klien Anda dapat menangani perutean. Express adalah untuk melayani API.
Rute rumah saya terlihat seperti ini:
sumber
sumber
Ini adalah demo file lengkap dari server ekspres!
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
berharap ini akan membantu Anda!
sumber
Tambahkan Baris berikut ke kode Anda
Ganti "jade" dengan "ejs" & "XYZ" (versi) dengan "*" di file package.json
Kemudian di File app.js Anda Tambahkan Kode berikut:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Dan Ingat Simpan Semua file .HTML dalam Folder tampilan
Bersulang :)
sumber
Untuk html biasa, Anda tidak memerlukan paket npm atau middleware
gunakan saja ini:
sumber
Sangat menyedihkan bahwa sekitar tahun 2020 masih express belum menambahkan cara untuk merender halaman HTML tanpa menggunakan
sendFile
metoderesponse
objek. MenggunakansendFile
bukanlah masalah tetapi menyampaikan argumen kepadanya dalam bentukpath.join(__dirname, 'relative/path/to/file')
tidak terasa benar. Mengapa pengguna harus bergabung__dirname
ke jalur file? Ini harus dilakukan secara default. Mengapa root server tidak dapat dengan defalut direktori proyek? Juga, menginstal ketergantungan templating hanya untuk membuat file HTML statis lagi tidak benar. Saya tidak tahu cara yang benar untuk mengatasi masalah ini, tetapi jika saya harus menyajikan HTML statis, maka saya akan melakukan sesuatu seperti:Contoh di atas mengasumsikan bahwa struktur proyek memiliki
views
direktori dan file HTML statis ada di dalamnya. Sebagai contoh, katakanlah,views
direktori memiliki dua file HTML bernamaindex.html
danabout.html
, untuk mengaksesnya, kita dapat mengunjungi:localhost:8153/index.html
atau hanyalocalhost:8153/
untuk memuatindex.html
halaman danlocalhost:8153/about.html
memuatnyaabout.html
. Kita dapat menggunakan pendekatan serupa untuk melayani aplikasi reaksi / sudut dengan menyimpan artefak diviews
direktori atau hanya menggunakandist/<project-name>
direktori default dan mengkonfigurasinya di server js sebagai berikut:sumber
Saya ingin mengizinkan permintaan untuk "/" ditangani oleh rute Express di mana sebelumnya mereka telah ditangani oleh middleware statika. Ini memungkinkan saya untuk membuat versi biasa index.html atau versi yang memuat gabungan JS dan CSS yang diperkecil, tergantung pada pengaturan aplikasi. Terinspirasi oleh jawaban Andrew Homeyer , saya memutuskan untuk menyeret file HTML saya - tidak dimodifikasi - ke folder views, konfigurasikan Express seperti
Dan menciptakan pengendali rute seperti itu
Ini bekerja dengan cukup baik.
sumber
Di server.js, harap sertakan
sumber
Jika Anda mencoba menyajikan file HTML yang SUDAH memiliki semua konten di dalamnya, maka file tersebut tidak perlu 'dirender', hanya perlu 'disajikan'. Rendering adalah ketika Anda memiliki server memperbarui atau menyuntikkan konten sebelum halaman dikirim ke browser, dan itu memerlukan dependensi tambahan seperti ejs, seperti yang ditunjukkan oleh jawaban lain.
Jika Anda hanya ingin mengarahkan browser ke file berdasarkan permintaan mereka, Anda harus menggunakan res.sendFile () seperti ini:
Dengan cara ini Anda tidak perlu dependensi tambahan selain express. Jika Anda hanya ingin agar server mengirim file html yang sudah Anda buat, cara di atas adalah cara yang sangat ringan untuk melakukannya.
sumber
Masukkan file index.html Anda ke folder publik
Sekarang jalankan kode berikut di terminal Anda
sumber
Saya biasanya menggunakan ini
Berhati-hatilah karena itu akan membagikan apa pun di direktori / web.
Saya harap ini membantu
sumber
jika Anda menggunakan kerangka express ke node.js
instal npm ejs
kemudian tambahkan file konfigurasi
;
membuat halaman dari ekspor module form.js memiliki file html di dir dilihat dengan ekstensi nama file ejs sebagai
form.html.ejs
kemudian buat form.js
res.render('form.html.ejs');
sumber