node.js
didasarkan pada mesin v8
Chrome
untuk menjalankan kode js
, sehingga kita dapat menyingkirkan lingkungan browser dan menjalankan kode js
langsung di konsol, seperti hello world
berikut kode hello world
console.log('hello world');
Anda dapat menjalankannya langsung menggunakan node
di konsol
Modul http
bawaan dari node.js
http
kemampuan layanan http
dasar createServer
Berdasarkan spesifikasi CommonJS
, kita dapat menggunakan require
untuk mengimpor modul http
untuk digunakan modul yang memungkinkan kita membuat http
Server menerima fungsi panggilan balik sebagai parameter. Fungsi panggilan balik ini menerima dua parameter - request
dan response
.
request
mencakup semua informasi yang diminta oleh klien, seperti url
, header
permintaan, metode permintaan, dan badan permintaan.response
ini terutama digunakan untuk mengembalikan informasi ke Klien merangkum beberapa operasi yang terkait dengan badan respons. Misalnya, metode response.writeHead
memungkinkan kita untuk menyesuaikan informasi header dan kode status dari badanpengembalian isi respon, kita memanggil metode response.end()
. Anda dapat mengirim isi respon ke klien. Menggunakan fungsi createServer
hanya membuat objek Server
untuk kita, tetapi tidak mengaktifkannya untuk mendengarkan listen
metode objek server
untuk mendengarkan. Kita sebenarnya dapat mulai menjalankan
listen
sebagai server. Parameter pertama adalah nomor port mendengarkan, parameter kedua adalah ip
host terikat, dan parameter ketiga adalah fungsi panggilan balik yang akan menjadi. dipanggil secara asinkron oleh modul http
. Ketika terjadi kesalahan, pengecualian tersebut dapat diperoleh dari parameter pertama fungsi panggilan balik. Kita dapat memilih untuk menangani pengecualian tersebut untuk membuat server kita lebihkuat menggunakan modul http
untuk membuat server sederhana.
const { createServer } = require('http' ); const HOST = 'host lokal'; const PORT = '8080'; const server = createServer((req, resp) => { // parameter pertama adalah kode status yang dikembalikannya // dan parameter kedua adalah info header respons resp.writeHead(200, { 'Jenis Konten': 'teks/polos' }); console.log('server berfungsi...'); // panggil metode akhir untuk memberi tahu server bahwa permintaan telah dipenuhi resp.end('halo server http nodejs'); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log('Ada yang salah: ', kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
Anda dapat langsung mencoba menjalankannya dengan node
dan membuat server Anda sendiri! Setelah server berjalan, browser dapat mengakses server dengan mengakses http://localhost:8080
Anda juga dapat menggunakan nodemon
untuk menjalankannya, sehingga ketika kode kita berubah, kita tidak perlu menghentikan program secara manual dan menjalankannya kembali
npm
i -g nodemon
tanpa menggunakan npx nodemon
caranya juga sangat mudah, cukup ubah perintah node
menjadi perintah nodemon
nodemon http-server.js
. Saat kami menggunakan objek createServer
dan resp
sebelumnya, kami tidak dapat melihat perintah sintaksis apa pun. Kami harus mengikuti dokumentasi node
resmi untuk memeriksanya kapan saja dapat menggunakan .d.ts
membantu kami menyediakan fungsi sintaks prompt. Perhatikan bahwa kami tidak menggunakan ts
untuk pengembangan, tetapi hanya menggunakan fungsi sintaks prompt
npm init -y
@types/node
-- pnpm i @types/node -D
jsconfig.json
di direktori proyek, kecualikan node_modules
, tidak perlu dicentang{ "compilerOptions": { "checkJs": benar }, "kecualikan": ["node_modules", "**/node_modules/*"] }
Saya ingin tahu apakah Anda menemukan bahwa sebenarnya ada kesalahan pada kode di atas? checkJs
dapat membantu kami memeriksa kesalahan tipe. Anda dapat memilih apakah akan mengaktifkannya sesuai dengan kebutuhan Anda. Setelah mengaktifkan centang, kami akan segera diberitahu tentang ketidakcocokan tipe parameter.
Pada saat ini, arahkan mouse ke metode listen
dan Anda dapat melihat tanda tangan dari metode tersebut.
Seperti yang Anda lihat, parameter port
asli harus bertipe number
, tetapi ketika kami mendefinisikannya, itu bertipe string
, jadi tidak cocok. Ubah saja menjadi 8080
number
dan Anda dapat langsung melihat dokumentasi api
yang relevan tanpa membuka node
resminya. Butuh waktu lama untuk menemukan dokumen tersebut dan memeriksanya.
. http server
sederhana kami hanya mengembalikan satu kalimat, jadi apakah mungkin untuk mengembalikan beberapa kalimat? Hal ini memerlukan penggunaan metode write
pada objek resp
. end
hanya dapat mengembalikan konten satu kali. Sebaliknya, end
metode write
. Kita dapat menulis konten ke dalam badan respons beberapa kali berikan parameter apa pun. Hanya biarkan dia menyelesaikan fungsi pengiriman isi respons
const { createServer } = require("http"); const HOST = "localhost"; konstan PORT = 8080; const server = createServer((req, resp) => { resp.writeHead(200, { "Tipe Konten": "teks/polos" }); console.log("server berfungsi..."); // tulis beberapa kalimat lorem resp.write("Lorem ipsum dolor sit amet consectetur adipisicing elit.n"); resp.write("Omnis eligendi aperiam delectus?n"); resp.write("Aut, quam quo!n"); resp.end(); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log("Ada yang salah: ", kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
Kali ini kita menulis tiga kalimat, dan efeknya sekarang menjadi seperti ini
kita tidak hanya dapat mengembalikan string ke browser, tetapi juga langsung membaca konten file html
dan mengembalikannya ke browser sebagai hasilnya. Hal ini memerlukan penggunaan modul bawaan Node.js
lainnya - fs
, yang Modul ini menyediakan fungsi operasi file. Anda dapat menggunakan fs.readFile
untuk membaca file secara asinkron, tetapi modul tersebut tidak akan mengembalikan objek promise
, jadi kami perlu meneruskan panggilan balik untuk menangani operasi setelah membaca file Anda juga dapat menggunakan fs.readFileSync
Memblokir pembacaan file secara sinkron, di sini kita memilih pembacaan asinkron
const { createServer } = require("http"); const fs = memerlukan("fs"); const HOST = "localhost"; const PORT = 8080;const server = createServer((req, resp) => { // ubah tipe MIME dari text/plain menjadi text/html resp.writeHead(200, { "Tipe Konten": "teks/html" }); // membaca isi file html fs.readFile("index.html", (err, data) => { jika (salah) { konsol.kesalahan( "terjadi kesalahan saat membaca konten file html:", berbuat salah ); } console.log("operasi berhasil!"); resp.tulis(data); resp.end(); }); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log("Ada yang salah: ", kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
Hasil saat ini adalah sebagai berikut:
Berhasil mengembalikan html
Catatan: Di sini Anda perlu mengubah **Content-Type**
header respons menjadi **text/html**
untuk memberi tahu browser bahwa kami mengembalikan konten file **html**
. Jika Anda masih menggunakan **text/plain**
dikembalikan, browser tidak akan mengurai konten yang dikembalikan, meskipun sesuai dengan sintaks **html**
, konten tidak akan diuraikan, seperti berikut:
Ketika kita perlu menulis server back-end yang hanya bertanggung jawab untuk mengembalikan data antarmuka, kita perlu mengembalikan konten dalam format json
. Saya yakin Anda cerdas dan tahu cara menanganinya:
MIME
ke application/json
resp.write
, string json
diteruskan. Anda dapat menggunakan JSON.stringify
untuk memproses objek dan mengembalikanconst { createServer } = require("http"); const HOST = "localhost"; konstan PORT = 8080; const server = createServer((req, resp) => { // ubah tipe MIME menjadi application/json resp.writeHead(200, { "Tipe Konten": "application/json" }); // membuat data json dengan menggunakan objek const jsonDataObj = { kode: 0, pesan: "sukses", data: { nama: "plastisin", usia: 20, hobi: "coding", }, }; resp.write(JSON.stringify(jsonDataObj)); resp.end(); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log("Ada yang salah: ", kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
Hasilnya adalah sebagai berikut:
Ide mengembalikan file pdf mirip dengan mengembalikan file html
sebelumnya, keduanya merupakan proses pengaturan tipe MIME
dari header respons, membaca file, dan mengembalikan konten file sesuatu yang berbeda. Ide kami adalah melakukannya saat server sedang berjalan. Untuk menghasilkan file pdf
dan mengembalikannya, Anda perlu mengubah tipe MIME
menjadi application/pdf
Untuk menghasilkan file pdf
, Anda perlu menggunakan perpustakaan - pdfkit
pnpm i pdfkit.
Pertama, kita menulis fungsi untuk membuat file pdf
, karena membuat file pdf
juga memerlukan Lakukan beberapa operasi penulisan, tidak yakin kapan akan selesai, tetapi permintaan kita harus menunggu hingga file pdf
dibuat sebelum kita bisa mendapat respons, jadi kita perlu membuatnya asinkron dan mengembalikan promise
/** * @deskripsi Buat file pdf */const createPdf = () => { kembalikan Janji baru((putuskan, tolak) => { if (!fs.existsSync("example.pdf")) { // membuat objek Dokumen PDF const doc = Dokumen PDF baru(); // membuat aliran tulis dengan menyalurkan konten pdf. doc.pipe(fs.createWriteStream("example.pdf")); // menambahkan beberapa konten ke dokumen pdf doc.fontSize(16).text("Halo PDF", 100, 100); // selesaikan operasi pembuatan file PDF. doc.end(); } tekad("sukses"); }); };
Operasi pipeline digunakan di sini untuk mentransfer konten objek PDFDocument
ke aliran tulis yang baru dibuat melalui pipeline. Ketika operasi selesai, kami memberi tahu dunia luar melalui resovle
bahwa file pdf
telah dibuat dan kemudian memanggil
const server dalam kode server. = createServer(async (req, resp) => { // ubah tipe MIME menjadi application/pdf resp.writeHead(200, { "Jenis Konten": "aplikasi/pdf" }); // membuat file pdf tunggu buatPdf(); // membaca file pdf yang dibuat fs.readFile("example.pdf", (err, data) => { jika (salah) { konsol.kesalahan( "terjadi kesalahan saat membaca isi file pdf:", berbuat salah ); membuang kesalahan; } console.log("operasi berhasil!"); resp.end(data); }); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log("Ada yang salah: ", kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
Sekarang browser dapat membaca file pdf
yang dibuat
Baca
file audio, lalu kirimkan ke objek resp
melalui pipeline dan kembalikan.
const { stat, createReadStream } = memerlukan("fs"); const HOST = "localhost"; konstan PORT = 8080; const server = createServer((req, resp) => { // ubah tipe MIME menjadi audio/mpe resp.writeHead(200, { "Tipe Konten": "audio/mp3" }); const mp3FileName = "audio.mp3"; stat(mp3FileName, (err, statistik) => { jika (statistik.isFile()) { const rs = buatReadStream(mp3FileName); // menyalurkan aliran baca ke resp rs.pipe(resp); } kalau tidak { resp.end("file mp3 tidak ada"); } }); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log("Ada yang salah: ", kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
Efeknya adalah sebagai berikut
Setelah dibuka, terdapat antarmuka untuk memutar audio. Ini adalah tampilan file audio yang disediakan oleh chrome
. Saat Anda membuka konsol, Anda akan menemukan ada file audio yang dikembalikan.
Catatan: Setelah meneruskan aliran file audio ke **resp**
melalui pipa , tidak perlu memanggil metode **resp.end()**
, karena ini akan menutup seluruh respons dan menyebabkan file audio menjadi tidak tersedia.
Pemrosesan file video dan file audio sama, hanya saja tipe MIME
perlu diubah menjadi video/mp4
. Yang lainnya sama
const { createServer } = require("http"); const { stat, createReadStream } = memerlukan("fs"); const HOST = "localhost"; konstan PORT = 8080; const server = createServer((req, resp) => { // ubah tipe MIME menjadi audio/mpe resp.writeHead(200, { "Tipe Konten": "audio/mp4" }); const mp4FileName = "video.mp4"; stat(mp4FileName, (err, statistik) => { jika (statistik.isFile()) { const rs = buatReadStream(mp4FileName); // menyalurkan aliran baca ke resp rs.pipe(resp); } kalau tidak { resp.end("file mp4 tidak ada"); } }); }); server.listen(PORT, HOST, (kesalahan) => { jika (kesalahan) { console.log("Ada yang salah: ", kesalahan); kembali; } console.log(`server mendengarkan di http://${HOST}:${PORT} ...`); });
kita belajar:
Node
untuk membuat server http
pdf
js
html
JSON
Meskipun isinya sederhana, saya harap Anda dapat mengikuti dan mencobanya bukan berarti Anda mengetahuinya. Anda akan menemukan masalah Anda sendiri hanya setelah Anda benar-benar menerapkannya.