
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 -Djsconfig.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/jsonresp.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 httppdfjshtmlJSONMeskipun 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.