- Node.js berfungsi dengan model yang berorientasi pada peristiwa dan E/S tidak ideal untuk bersamaan.
- Arquitectura modular: server, router, dan penangan facilitan escalar dan mantener.
- Ekspresikan percepatan pembuatan aplikasi web dengan rute, tampilan, dan middleware.
- Bekerja dengan npm dan modul nativos untuk menyimpan arsip, merah, rutas dan sistem.
Jika ini adalah pertama kalinya Anda menghubungi Node.js, berikut ini adalah panduan berpikir untuk mencoba yang terbaik: ini adalah hal yang paling mendasar dalam pekerjaan nyata, dengan contoh praktik dan penjelasan yang jelas. Anda akan bergabung dengan ponsel Hola Mundo dengan menggunakan aplikasi web dengan Express, melalui modul sistem, npm, dan enfoque asinkron yang menjadi khusus pada ekosistem Node.
Además de orientarte con persyaratan sebelumnya, konfigurasi dalam Visual Studio Code dan proyek awal, sebenarnya bagaimana mengatur server HTTP, memasukkan petisi, mengelola kontrol, bekerja dengan data POST tanpa memblokirnya dan memasuki filosofi yang digerakkan oleh peristiwa. Semua dengan lenguaje cercano, sin rodeos, dan con el toque necesario to que no te pierdas.
Persyaratan sebelumnya dan apa yang diperlukan untuk menjalankan Node.js
Diperlukan pengetahuan dasar JavaScript (Tipos, Variabel, Fungsi, Objek) dan Ganas De Probar Cosas Con La Consola. Node.js adalah sebuah entorno de eksekusi JavaScript yang berasal dari navegador, berbasis di V8, dengan sebuah perpustakaan yang kuat dan model eksekusi dirigido por eventos y no bloqueante. Ini memungkinkan Anda untuk mengelola banyak koneksi secara bersamaan tanpa membuat banyak permintaan.
Con Node puedes construir layanan web, API REST, jaringan perintah, aplikasi dalam waktu nyata (obrolan, pemberitahuan), integrasi berdasarkan data dan proyek IoT ini. Untungnya, ini adalah cara kerja E/S secara bersamaan, sehingga ideal untuk lalu lintas dan pengalaman interaktif.
Unduh dan instal
Unduh Node.js dari web resmi di nodejs.org dan instal untuk sistem operasi Anda. Di Windows, macOS, atau Linux, unduh instalasi dan paket yang sesuai. Setelah instalasi, konfirmasikan ke terminal dengan: node -v y npm -v. npm adalah pengelolaan paket Node dan mengizinkan instalasi pustaka yang terceros dengan cara yang sederhana.
Kontak pertama Anda: Hola Mundo dengan VS Code
Si usas Visual Studio Code, Anda dapat membuka karpet proyek dan meluncurkan terminal terintegrasi dengan total comodidad. Buat karpet kerja dan masuk ke dalamnya: mkdir HelloNode && cd HelloNode.
Sekarang tentang karpet itu dalam VS Code con kode .. Buat sebuah file bernama app.js e perkenalkan algo sencillo para arrancar: un mensaje por consola.
var msg = 'Hello World';
console.log(msg);
Untuk menjalankannya, buka terminal yang terintegrasi dalam VS Code (Ver > Terminal, atau tekan Ctrl+`), lalu lanjutkan node app.js. Verás el clasico keluaran “Hello World” di konsol; ya, tentu saja, tapi konfirmasikan bahwa semuanya baik-baik saja.
Ini adalah servernya: server HTTP minimal
Simpul ke modul asli 'http' karena Anda dapat membuat server secara online. El corazón es http.createServer, Anda menerima fungsi panggilan balik yang akan dijalankan setiap kali Anda menerima petisi.
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('Hola Mundo');
response.end();
}).listen(8888);
Arráncalo con node server.js dan mengunjungi http://localhost:8888/. Magia de Node berada dalam model yang berorientasi pada suatu peristiwa: melewati fungsi dan waktu proses “lama de vuelta” (panggilan balik) ketika acara berhasil (petisi masuk).
Panggilan balik yang masuk, asincronía dan flujo de ejecución
Dalam JavaScript, fungsi-fungsi tersebut adalah bagian dasar: jika Anda bisa melakukan argumen seperti itu, menyerahkan dan menyimpan variabel. Patron ini dimasukkan ke dalam tombol acara Node: kode fungsi registrasi yang Anda jalankan ketika terjadi keberhasilan (misalnya, ada permintaan HTTP).
Sangat penting untuk memahami perbedaan antara operasi bloqueantes dan no bloqueantes. Jika Anda memperkenalkan sesuatu yang menjalankan CPU selama beberapa detik (misalnya, sebuah tombol untuk bekerja), proses masuk akan berhenti dan semua permintaan berikutnya. dan simpul, bekerja diam-diam yang bisa dilakukan dengan E/S yang tidak masuk akal dan panggilan balik atau janji untuk menghindari blokir hilo.
Perangkat modular: server, router, dan manejador
Separar responsabilidades Anda harus meningkatkan proyek: modul untuk server HTTP, atau untuk enrutador, dan lainnya untuk pengontrol (penanganan permintaan). Puedes eksponer berfungsi con exports dan memerlukan modul lokal con require('./miModulo').
Sebuah struktur tipikal mungkin adalah: index.js como punto de entrada, server.js con el HTTP server, router.js untuk memutuskan fungsi mana yang akan dijalankan setiap ruta y requestHandlers.js dengan logika setiap titik akhir. Organisasi ini menjaga kode tetap terbaca dan mudah diperiksa.
Ekstrayendo la ruta dan enrutando
Objek permintaannya sudah sesuai dengan URL yang diminta. El módulo nativo url permite extraer el nama jalur y, jika kamu salah, pertanyaannya. Dengan demikian, router dapat memutuskan untuk menjalankan kontroler.
var url = require('url');
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
// route(pathname) ...
}
El router recibe el mapa de rutas a funciones (objeto di setiap clave adalah sebuah ruta, dan el valor, el handler), bersama dengan nama jalurnya, dan pelajari apakah ada fungsi yang terkait. Jika ada, la ejecuta; jika tidak, kembangkan ke 404.
Haciendo that handler responda (pelindung yang benar)
Una tentación habitual es memastikan bahwa pengontrol membalas string dan server yang Anda tulis. Namun hal ini gagal ketika handler perlu melakukannya secara tidak sengaja (seperti memutar disk atau menjalankan perintah). Solusinya efektif inyectar el objeto response cepatlah handler dan propio handler menuliskan jawaban ketika ada tenga (misalnya, di dalam callback ada fungsi yang tidak aktif).
// router.js
function route(handle, pathname, response) {
if (typeof handle[pathname] === 'function') {
handle[pathname](response);
} else {
response.writeHead(404, {'Content-Type': 'text/html'});
response.write('404 No Encontrado');
response.end();
}
}
Pendekatan ini memungkinkan responden hanya ketika E/S tidak selesai, tanpa menghalangi proses dan tidak membatalkan penyerahan data sebelum waktunya.
Ekspres: membuat web aplikasi dalam hitungan menit
Express adalah kerangka kerja minimalis untuk Node.js yang memfasilitasi pengelolaan rute, tampilan, middleware, dan penggunaan HTTP. Dengan generator ini Anda dapat membuat struktur proyek dalam hitungan detik, dengan karpet untuk rute, pemandangan, dan estetika yang berulang.
- Buat folder untuk proyek Anda:
mkdir ExpressProjects && cd ExpressProjects. - Genera una plantilla:
npx express-generator HelloWorld --view=pugmembuat aplikasi dengan pemandangan motor Pug. - Buka di VS Code dengan
code .y revisa la estructura: bin (arranque), publik (JS/CSS/gambar), rute (controladores de rutas), 'view' (tanaman), aplikasi.js (konfigurasi), package.json (scripts y dependencias). - Instal dependensi dengan
npm installen la carpeta del proyecto. - Mulai aplikasi. Sebagai contoh, dengan kerusakan:
npx cross-env DEBUG=HelloWorld:* npm start. - Buka http://localhost:3000. Prueba mengubah tampilan utama: Dalam
views/index.pug, sustituye el título porh1 "Hello World!"dan isi ulang.
Ekspresikan penggabungan yang diperlukan untuk gestionar GET, POST, PUT y DELETE, menggunakan middleware, layanan estetika, menampilkan pemandangan, dan membuat aplikasi dari berbagai halaman dengan lebih sedikit gesekan.
npm dan modul yang digabungkan dengan Node
npm adalah pengelola paket Node dan izinkan Anda menginstal perpustakaan terceros. Sebagai contoh, untuk menambahkan Express: npm install express. Después podrás require('express') dan gunakan kode Anda. Ini adalah kelas yang fleksibel untuk menciptakan proyek Anda.
Además, Node incluye modul asli para tareas comunes: fs (arsip), http/https (pelayan), path (rutinitas), os (datos del sistema), url (mengurai URL) dan lebih banyak lagi. Anda tidak dapat mengimpor con require() tanpa memasang apapun.
Mencoba modul asli: informasi sistem
Modul 'os' menerima data dari sistem operasi. Buka konsol dan masuk ke REPL de Node con node untuk memeriksa fungsi dengan cepat tanpa membuat arsip.
- Menulis
os.platform()untuk mengetahui plataforma (win32, linux, darwin…). Confirmarás el SO activo secara langsung. - dengan
os.arch()mendapatkan arsitektur (x64, arm64…). Útil para binarios o builds. - Usa
os.cpus()untuk melihat inti atom yang tersedia. Ideal para equilibrar carga dengan kelompok atau proses lainnya. - Sal del REPL con
.exito pulsando Ctrl+C dos veces. Rápido y sin residuos.
Biblioteca terceros útil en el día a día
El ecosistema npm es enorme. Beberapa kegunaan yang populer: tajam (tratamiento de gambar dan kompresi), PDFKit (generación de PDF), validator.js (validación de cadenas), gambarmin y Jelek (minifikasi), pembuat sprite (peri), winston (penebangan) y komandan.js (CLI). Instálalas con npm install <paquete> ketika Anda membutuhkannya.
Cara mengeluarkan kode Node.js dari arsip
Simpan kode Anda dalam arsip, misalnya app.js, y ejecútalo con node app.js di terminal. Ini memulai program Anda dan melihat hasilnya di konsol, jika Anda menggunakan server, dan navigasi Anda.
Del REPL a la aplicación real: flujo completo
Uji REPL dengan sempurna untuk fungsi-fungsi kecil, tetapi ketika Anda membuat kode, Anda dapat menemukan pasar arsip, mengatur modul, dan menambahkan skrip npm. Ini adalah cara yang mungkin automatizar treas con npm run dan mendokumentasikan perintah inisiasi package.json.
Manejando data POST tanpa blokir
Ketika ada pengguna yang iri dengan formulanya, item petisi dapat dibaca dalam berbagai nama. Di server (panggilan balik de createServer) pendengar añade data y end untuk mengumpulkan konten dan memprosesnya hingga akhir. Juga menunjukkan kodifikasi, misalnya UTF-8, untuk memanipulasi dengan benar.
request.setEncoding('utf8');
var postBody = '';
request.addListener('data', function(chunk) {
postBody += chunk;
});
request.addListener('end', function() {
// route(handle, pathname, response, postBody)
});
Jika diperlukan kamp-kamp ekstra individu, usa el módulo 'querystring' untuk mengurai data kapan saja seperti apa application/x-www-form-urlencoded: querystring.parse(postBody).text, Misalnya.
Pengoperasian yang mahal dan tidak terhambat
Untuk menjalankan perintah sistem tanpa menghalangi server, gunakan child_process.exec kamu menjawab panggilan balik. Anda dapat memilih opsi seperti itu timeout o maxBuffer untuk mengontrol perintah pesados. Pelanggannya adalah orang yang sama: nada de bloquear, dan responden ketika ada data.
var exec = require('child_process').exec;
function handler(response) {
exec('ls -lah', function(error, stdout, stderr) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(stdout);
response.end();
});
}
Jika perintah diubah dengan cara yang lebih mendesak, maka pemulihan rute harus ditanggapi dengan normal seperti biasa tidak ada pekerjaan yang dilakukan secara sinkrónico costoso dalam prinsip utama.
Subidas de ficheros: enfoque dan herramientas
Untuk mengelola unggahan multiparte (gambar dan arsip lain) Praktik paling banyak ini berulang pada paket khusus. Modul seperti itu hebat facilitan parsear formularios multipart/form-data, mengakses arsip temporal dan memindahkannya ke tujuan akhir. Idenya es la misma: panggilan balik/janji dan bekerja dengan cara yang aman di sungai.
Meskipun implementasinya selesai lolos dari langkah pertama, yang terpenting adalah mengintegrasikan unggahan ke dalam proses Anda: Server que recibe el formulario, router que dirige a la ruta de subida, y handler yang valid, jaga dan tanggapi dengan hasilnya (misalnya, tampilkan gambar).
Struktur pemandangan dan konten dinamis
Jika Anda memilih Express dengan Pug atau motor lainnya, pengontrol pasa data pada tampilan dan ini adalah renderiza. Untuk formulasi sencillo dengan area teks yang dikirimkan melalui POST dan rute yang Anda muestra, cukup dengan dos handler: salah satu yang Sirve el formulario dan lainnya proses dan kembangkan konten diterima.
Praktik organisasi yang baik
Evita archivos monolíticos. Bagilah dalam modul, nama fungsi dengan kata kerja yang menyatakan tindakan (misalnya, mulai, meng-upload, daftar), dan desacpla con inyección de dependencias cuando tenga sentido (pasando fungsi atau peta rute pada server dan router). Mempertahankan kapasitas kerja tetap memungkinkan untuk tumbuh tanpa biaya.
Apa yang bisa dibangun dengan Node.js
Modelnya digerakkan oleh peristiwa dan non-pemblokiran Hal ini terutama berlaku untuk: layanan web, API REST, aplikasi waktu nyata (obrolan, dasbor), bot dan CLI, integrasi dengan basis data, pekerjaan, dan kontrol perangkat keras. Fasilitas untuk mengelola soket web dan streaming untuk berkomunikasi dalam pemilihan alami untuk pengalaman interaktif.
- Servidores y sitios web con plantillas o SSR.
- API REST persiapan untuk lalu lintas tinggi.
- Waktu nyata dengan soket untuk obrolan, pemberitahuan, atau permainan.
- alat baris perintah untuk mengotomatiskan tugas.
- Proses dengan file dan basis data, cola dan pipa.
- IoT dan perangkat keras con librerías específicas.
Cara belajar dan praktik
Ada banyak interaksi yang harus dilakukan dengan kode dan salida lado a lado, cita-cita untuk memahami contoh dengan cepat. Namun demikian, Anda dapat maju tanpa membuat dokumen: mendokumentasikan, menyalin contoh, dan mengeksekusi di terminal lokal Anda sebanyak yang cukup dari awal.
Kode Visual Studio: produktif tanpa mengeluarkan editor
Terminal terintegrasi, terminal, dan ekstensi VS Code telah bekerja dengan Node sea yang sangat berguna. Dari “Ver > Terminal” dapat membuka shell, mengubah yang telah ditentukan dan mengeluarkannya node o npm run dosa meninggalkan editor. Selain itu, konfigurasikan launch.json Anda mengizinkannya untuk mengambil langkah demi langkah.
Versi yang tersedia dan stabil
Banyak panduan klasik yang dicoba dengan versi antiguas dari Node, tapi konsepnya se mantienen vigentes: panggilan balik, modul nativos, asincronía, enrutado dan pemisahan tanggung jawab. Kami bekerja dengan versi terkini, lebih cepat dan lebih aman, dan dengan ekosistem yang lebih cepat dan lebih cepat.
Unduh dan akses tambahan
Anda dapat memperluas studio dengan dokumentasi, PDF, dan tutorial. Periksa kembali web resmi Node untuk mengunduh dan mengunduh baru, dan mengidentifikasi sumber-sumber pengajaran yang disertakan ejercicios, quizzes y retos untuk mencapai pemahaman dan kemajuan yang telah dicapai.
Jika Anda mencari materi pelengkap, temukan panduan pengantar dan referensi praktik dengan contoh, seperti yang disertakan dengan unduhan ketika ada kebutuhan laut. Mantén tu foco en practicar: melihat itu baik; ejecutar, baju monyet cosas y arreglarlas, mejor.
Contoh lengkap: aplikasi mini dengan router dan penangan
Juntando piezas. Imagina un proyecto con index.js que arranca el servidor, server.js con HTTP y parsing de POST, router.js Anda memutuskan fungsi yang dijalankan y requestHandlers.js dengan rutas: una yang muestra un formulario dan lain-lain yang enseña el texto enviado.
// index.js
var server = require('./server');
var router = require('./router');
var handlers = require('./requestHandlers');
var handle = {};
handle['/'] = handlers.iniciar;
handle['/iniciar'] = handlers.iniciar;
handle['/subir'] = handlers.subir;
server.iniciar(router.route, handle);
// server.js
var http = require('http');
var url = require('url');
function iniciar(route, handle) {
function onRequest(request, response) {
var postData = '';
var pathname = url.parse(request.url).pathname;
request.setEncoding('utf8');
request.addListener('data', function(chunk) { postData += chunk; });
request.addListener('end', function() {
route(handle, pathname, response, postData);
});
}
http.createServer(onRequest).listen(8888);
}
exports.iniciar = iniciar;
// router.js
function route(handle, pathname, response, postData) {
if (typeof handle[pathname] === 'function') {
handle[pathname](response, postData);
} else {
response.writeHead(404, {'Content-Type': 'text/html'});
response.end('404 No Encontrado');
}
}
exports.route = route;
// requestHandlers.js
var querystring = require('querystring');
function iniciar(response) {
var body = '<html>'+
'<head><meta charset=\'UTF-8\' /></head>'+
'<body>'+
'<form action=\'/subir\' method=\'post\'>'+
'<textarea name=\'text\' rows=\'10\' cols=\'40\'></textarea>'+
'<input type=\'submit\' value=\'Enviar\' />'+
'</form>'+
'</body></html>';
response.writeHead(200, {'Content-Type': 'text/html'});
response.end(body);
}
function subir(response, postData) {
var text = querystring.parse(postData).text || '';
response.writeHead(200, {'Content-Type': 'text/html'});
response.end('Tu enviaste: ' + text);
}
exports.iniciar = iniciar;
exports.subir = subir;
Ini adalah hal yang paling penting sebuah server berfungsi dan tidak ada blokir, menjalankan dan mengontrol separados, mempersiapkan untuk membuat pemandangan, mengunggah, atau integrasi dengan basis data.
Clave de Node sedang memikirkan “tindakan”: fungsi pasar, ketergantungan langsung ketika mengadakan pertemuan dan menjaga sejumlah kecil tanggung jawab. Karena itu, aplikasi Anda akan lebih mudah dikelola dan disesuaikan untuk meningkatkan kinerja Anda.
Semua yang Anda lihat adalah satu solid dasar: setelah menginstal Node dan jalankan skrip primer Anda, pasando dengan VS Code, sebuah server HTTP nativo, enrutado propio, Express, npm, modul nativos, REPL, tanpa hambatan dan manejo de formularios POST. Dengan praktik dan beberapa kali pengulangan, Anda dapat membangun proyek setiap kali lebih lengkap tanpa mengetahui kodenya dengan jelas.