>> Baiklah.
Jadi cliffhanger itu, apakah node.js seperti yang anda tahu ia hari ini?
Apa-apa? Yeah?
>> Ia adalah seperti yang rangka kerja menulis JavaScript
permohonan secara meluas -
>> OK, yang bekerja.
>> - Saya tahu seperti kegunaan biasa seperti -
atau sesuatu yang anda boleh lakukan ialah seperti -
[Didengar Catatan]
>> OK baik.
Ya, jadi ia satu rangka kerja.
Ia enjin di mana anda boleh melaksanakan kod JavaScript
tapak pelayan.
Ini boleh bermakna paling mudah perkara
seperti menulis baris arahan skrip tidak Python atau Bash
atau Ruby atau PHP, tetapi hanya dalam JavaScript sendiri
dan menyempurnakannya pada berkelip arahan prompt.
Atau anda sebenarnya boleh menjalankan ia dalam pelayan web.
Dan sebenarnya dalam node.js sendiri,
rangka kerja ini adalah sejumlah perpustakaan antaranya ialah
dalam pelayan HTTP terbina dalam.
Jadi, anda sebenarnya boleh menulis pelayan seperti yang kita akan melihat
dalam hanya seketika, super mudah dengan hanya untuk memahami sedikit
HTTP dan TCP dan pelabuhan.
Dan anda boleh bertelur mendengar yang web server tanpa Apache,
tanpa IIS Microsoft.
Tanpa apa-apa perisian yang dipasang,
anda hanya boleh bertelur ini dan mendengar apa-apa yang paling pelabuhan
pada sistem yang anda dibenarkan untuk.
Jadi kes dan mata, biarlah saya pergi dan membuka
sehingga contoh ini, pelayan-0.js.
Jadi melihat bahawa bahagian atas fail ini, hanya sekumpulan
komen tidak menarik, dan kemudian ada pasangan
garis-garis wakil kod bahawa kita akan melihat recurringly.
Jadi, var HTTP mendapat memerlukan "HTTP".
Jadi terbina dalam node.js ' infrastruktur adalah sejumlah
modul yang benar-benar hanya perpustakaan dan segala-galanya adalah jenis
ruang nama dengan pengecam unik
seperti ini adalah "HTTP".
Supaya seperti dalam banyak bahasa seperti Java dan C + +
dan C, hanya apabila anda mengimport atau termasuk
atau nod bercakap memerlukan modul tidak bit itu.
Dan semua memori memerlukan mendapatkan dimuatkan
ke dalam RAM dan oleh itu digunakan.
Jadi, anda jenis ini memuatkan perpustakaan atau modul atas permintaan.
Ini bermakna pergi ke hadapan dan memerlukan
untuk program ini perpustakaan HTTP,
dan merujuk kepada perpustakaan yang oleh cara ubah yang dipanggil HTTP.
Tetapi simbol kiri ini boleh telah dipanggil apa-apa, foo,
menggalang, Baz, ia tidak mengapa.
Jadi tidak seperti C + + dan Java dan C di mana apabila anda memerlukan
atau mengimport perpustakaan ia hanya jenis
daripada boleh diakses di peringkat global,
modul node.js adalah lebih ketat ruang nama.
Supaya sendiri - fungsi yang hanya boleh diakses pada masa ini
melalui nama pembolehubah ini.
Anda tidak boleh hanya bermula kaedah menaip yang wujud
dalam betul cara yang yang mungkin baik,
kerana maka ruang nama anda tidak mendapat hampir berantakan
seperti dalam banyak bahasa.
Baiklah, jadi sekarang sebagai biasa mencadangkan, mewujudkan pelayan HTTP
sebagai Jonathan [diandaikan ejaan] mungkin betul-betul
semudah memanggil mewujudkan kaedah pelayan di dalam
modul HTTP.
Jadi, ini kembali rujukan
kepada beberapa jenis pelayan web.
Ia datang ke Apache, tidak berat badan semestinya sebagai berat.
Yang ini sedikit lebih mudah.
Dan sekarang, saya hanya perlu hanya melakukan beberapa perkara.
Oleh itu, saya tatal turun ke bawah di sini
dan melangkau pengendali kaedah untuk seketika.
Dan notis ini selaras kod,
server.on yang pada dasarnya bermakna pelayan -
mendengar seperti dalam kod jQuery,
mendengar untuk acara dipanggil permintaan
dan hanya mengambil meneka apa yang perlu saya lakukan
apabila peristiwa permintaan kebakaran di pelayan.
Yeah?
>> Panggil fungsi pengendali.
Jadi, secara literal melaksanakan kod yang yang dirujuk
oleh pemboleh ubah ini dan benar-benar bukan berubah kepada simbol di sini,
apa yang simbol yang merujuk kepada?
Nah, ini nama berfungsi di sini
dan pengendali nampaknya mengambil masa dua hujah.
Mengapa kedua-dua? Nah, jika anda hanya baca dokumentasi yang tidak
untuk modul ini tertentu, anda akan diberitahu bahawa pengendali
yang akan dituntut akan lulus sekurang-kurangnya dua hujah,
merujuk kepada permintaan itu,
dan dalam kita permintaan itu secara literal bermakna permintaan HTTP.
Jadi, semua orang HTTP header bahawa anda mungkin ingat
dari permulaan semester atau beberapa kelas sebelum
atau pengalaman seperti mendapatkan garis dan garis tuan rumah
dan garis User-Agent, semua itu adalah terkandung di dalam dan lebih
objek permintaan ini.
Dan objek sambutan yang disusun untuk data keluar.
Jadi, anda mempunyai rujukan kepada objek yang akan membolehkan anda
untuk menghantar maklumat kembali ke pelayar dengan memanggil kaedah
pada hujah kedua dipanggil Res untuk tindak balas.
Tetapi ini boleh dipanggil foo atau menggalang, ini hanya konvensyen.
Jadi sekarang, apa yang saya lakukan?
Nah, ternyata bahawa di dalam pelayan web ini sangat mudah
bahawa saya melaksanakan, saya akan melakukan yang berikut.
Saya akan menulis satu HTTP header dengan kod status 200,
200 makna OK, semuanya berjalan dengan lancar.
Dan kemudian, saya akan untuk memindahkan nampaknya.
Apakah jenis data yang daripada Hujah kedua ke kepala betul?
>> Ia objek?
>> Ia merupakan satu objek dengan berapa banyak kunci dan nilai-nilai?
Hanya salah satu daripada setiap, kanan, satu nilai utama pasangan.
Jadi, 'jenis kandungan.
Dan satu-satunya sebab Saya memetik di sini adalah
kerana sempang mungkin conflated untuk tanda tolak
atau sesuatu seperti itu.
Jadi, saya perlu memetik di sini, luka terbakar atau sebut harga berganda.
Tetapi sekali lagi paradigma biasa
dalam kod JavaScript sering petikan tunggal pada hari ini,
kolon dan kemudian nilai.
Jadi, ini adalah hanya yang dipanggil Jenis fikiran.
Ini adalah header HTTP yang yang betul-betul akan
berpuas jenis sempang kolon teks palang biasa yang akan
untuk dihantar dari pelayan kepada pelayar
supaya pelayar tahu sama ada untuk menjalankan teks mentah ini
atau HTML atau sebagai imej atau filem
atau fail flash atau apa-apa lagi.
Sekarang, di mana saya benar-benar mahu untuk menghantar dalam badan halaman?
Nah, hanya dengan membaca dokumentasi yang
untuk objek sambutan di dalam perpustakaan ini.
Saya melihat bahawa ada hak kaedah dan yang mengambil tali,
mungkin perkara-perkara lain tetapi minimum rentetan.
Dan tali adalah apa yang meludah ke pelayar.
Dalam kes ini super mudah, dunia hello yang,
tetapi ia boleh menjadi opne kurungan, html, kurungan rapat,
kepala kurungan terbuka, berhampiran kurungan dan sebagainya,
ini boleh menjadi html mentah.
Tetapi kita menjaga contoh mudah dengan hanya meludah
keluar yang paling mudah jenis fikiran yang boleh dikatakan teks / plain.
Dan kemudian response.end hanya bermakna menutup sambungan
dan menghantar semua yang saya mempunyai jenis buffered di dalam
objek ini kembali untuk pelayar.
Aku selesai. Baiklah.
Jadi, perkara terakhir yang Saya melakukan turun di sini
dan ini adalah agak sewenang-wenangnya dan bertujuan untuk menjadi sejuk,
adalah saya memberitahu server akhirnya untuk mendengar
pada TCP tertentu oleh port lalai.
Ingat dari awal kelas perkhidmatan yang -
atau anda biasanya unik mengenal pasti dengan nombor,
AD adalah web, 443 adalah berdasarkan HTTP laman web, 22 adalah SSH, 21 adalah FTP
dan 1337 adalah yang sewenangnya tetapi ia lebih tinggi daripada 1024
yang bermaksud pada kebanyakan sistem, saya boleh menggunakannya
tanpa perlu super hak pengguna.
Jadi ia hanya mudah.
Tetapi 8080 adalah kira - yang sama satu, 8088, benar-benar apa-apa yang besar
dalam beribu-ribu seperti biasa tetapi ini hanya lebih elit.
Baiklah, jadi apa yang berlaku apabila saya benar-benar menjalankan ini?
Well, saya tidak hanya melawat halaman dalam pelayar.
Fail ini dipanggil pelayan-0.js.
Kerana sekali lagi, Apache adalah kini keluar gambar
untuk separuh kedua kursus.
Jika saya ingin web pelayan, saya perlu untuk menulis
dan kemudian berjalan pelayan web ini.
Tetapi ternyata bahawa JavaScript kedua-dua di sebelah pelanggan
dan sebelah pelayan adalah bahasa ditafsirkan.
Jadi, semua saya perlukan adalah seorang juru bahasa.
Jadi it's - jika berkeras untuk menjalankan nod dan kemudian pelayan-0.js,
Saya mungkin atau mungkin tidak melihat beberapa output bergantung
kepada apa perpustakaan saya dimasukkan, apa-apa seolah-olah berlaku.
Tetapi biarlah saya pergi ke pelayar dan biarlah saya pergi
kepada alamat IP yang sama pelanggan CS50 saya.
Tetapi ini boleh hanya dan juga menjadi Mac saya
atau PC saya dan kemudian tekan enter.
Yang benar-benar kelihatan seperti Apache.
Itu seperti direktori penyenaraian kita melihat
di dalam separuh pertama.
Jadi, apa yang saya lakukan salah?
Yeah.
[Didengar Catatan]
Tepat, bukan?
Jadi, Apache masih mendengar pada port lalai 80.
Walaupun saya boleh mengubahnya, Saya boleh mematikannya semua bersama-sama
tetapi ia masih berjalan.
Tetapi lelaki ini boleh pasti hidup bersama.
Saya hanya perlu meletakkan kolon 1337 dan maka mungkin
atau mungkin bukan palang di akhir untuk mengakses pelabuhan ini
bahawa pelayan ini sedang berjalan pada.
Dan sekarang saya melihat bahawa hello, dunia telah kembali.
Dan saya boleh memukul tambah nilai seperti banyak kali yang saya mahu,
ia masih berkhidmat sehingga halaman.
Sesungguhnya jika saya membuka Chrome inspektor, pergi ke rangkaian
dan muat semula keseluruhan halaman,
melihat bahawa sesungguhnya ini adalah permintaan yang dihantar.
Jika saya melihat sumber mentah,
notis pelayar saya menghantar semua perkara-perkara.
Dan kemudian sambutan daripada pelayan adalah super mudah.
Terdapat 200.
Jika ia tidak terlalu rendah pada skrin,
terdapat jenis kandungan.
Dan kemudian node.js jenis secara automatik
bagi saya menambah tarikh dan semua barangan yang lain
bahawa pelayar biasanya harapkan.
Jadi, mari kita hanya melihat sedikit cek kewarasan.
Biar saya kembali ke kod dalam server-0.js dan biarlah saya -
setiap kali saya pergi ke pengendali,
ingin saya katakan console.log.
('Kami mempunyai pengunjung!').
Saya tidak perlu susun semula atau apa-apa seperti itu,
ia bahasa yang ditafsirkan.
Jadi sekarang, saya kembali ke halaman, memuat semula satu, dua,
tiga kali dan pergi belakang untuk tingkap saya.
Dan kini saya melihat ini.
Baik yang pelik, Saya melihat enam baris.
Menarik web trivia, kenapa Saya mendapat enam permintaan bukan tiga?
Yeah?
[Didengar Catatan]
Yeah. Jadi, seperti yang anda mungkin tahu icon bodoh sedikit di bahagian atas
bar pelayar yang banyak
daripada laman web yang digunakan kekuatan menjadi puncak Harvard,
ia mungkin logo syarikat atau apa-apa seperti itu.
Jadi, pelayar hari ini jenis
daripada presumptuously membuat permintaan HTTP tambahan
kepada hampir setiap laman web yang anda melawat memeriksa jika terdapat
secara lalai fail dipanggil favicon.ico
di dalam direktori yang sama seperti fail yang anda minta.
Dan jika demikian, ia meletakkan icon di sana.
Jadi semua yang kita lihat betul-betul itu.
Dan sebenarnya, mari kita lihat jika kita boleh lihat ini daripada jenis
keluar hanya, 'Kami mempunyai pelawat.
Biar saya pergi ke hadapan dan output.
Dan saya hanya tahu ini daripada melihat dokumentasi.
Ada harta dalam objek permintaan yang dipanggil URL
yang berlaku sebagai jalan yang
yang diminta dalam URL sebenar.
Jadi, jika saya memulakan semula pelayan hanya dengan rerunning nod
pada pelayan-0.js dan kini lakukan satu ini, dua,
tiga dan kembali di sini.
Terdapat ia.
Slash adalah apa yang saya - manusia yang diminta
dalam favicon.ico adalah apa yang pelayar adalah
presumptuously meminta.
Tetapi titik tidak barangan favicon begitu banyak
tetapi bagaimana pelayan dikendalikan.
Yeah?
>> Mengapa yang mempunyai menjadi permintaan beberapa?
>> Mengapa yang perlu - oleh sifat bagaimana HTTP berfungsi.
Jadi, HTTP hanya boleh meminta satu fail pada satu masa.
Pelayar boleh pintar hari ini
dan menyimpan TCP sambungan terbuka.
Jika anda mengambil CS143 atau secara amnya biasa dengan rangkaian,
supaya anda boleh mendapatkan keuntungan kecekapan
dengan menjaga rangkaian soket terbuka
dalam membuat pelbagai HTTP permintaan bersiri ke atasnya
tetapi ia satu fail setiap permintaan.
Jadi, jika anda melawat sesuatu seperti -
Maksud saya kita boleh pergi ke apa-apa laman web yang paling.
Jika anda pergi ke - mari kita tarik ke atas pemeriksa Chrome di sini.
Ia boleh mendapatkan mengisi kebanyakan halaman.
Pergi ke tab rangkaian dan pergi ke www.cnn.com.
Dan apabila anda melawat cnn.com, laman utama yang -
pelayar anda bukan atrociously membuat - masih ada lagi.
OK. Sekurang-kurangnya 289 HTTP permintaan lagi dan lagi.
Dan ini adalah mengapa apabila anda melawat laman web terutamanya kembung,
mereka lambat untuk memuatkan kerana semua
aset mereka loading.
Jadi, ia kelihatan seperti 298.
Mungkin terdapat beberapa Ajax berlaku pada ketika ini atau beberapa
aset hanya rendah.
Jadi, setiap orang adalah permintaan individu akan kembali
dan sebagainya, belakang dan sebagainya.
Dan itulah sebabnya sebelum ini, walaupun walaupun kita jenis bercakap
mengenainya agak fancifully di mana anda meletakkan tag skrip,
benar-benar membuat perbezaan apabila anda mempunyai -
ia mula mempunyai banyak lalu lintas dan banyak
fail yang dipohon.
Dan setiap ini mewakili mungkin imej, fail media,
fail JavaScript, Fail CSS atau sebagainya.
Jadi, kita sudah sehingga beberapa 4 megabait hanya
untuk melihat berita hari ini.
Soalan yang baik.
Baiklah.
Jadi, apakah beberapa yang upsides walaupun?
Betul, kita tahu bagaimana untuk membuat laman web sudah dengan PHP.
Dan banyak anda datang untuk kelas mengetahui Django
dan Python atau rel dengan Ruby.
Jadi, mengapa kita perlu satu lagi bahasa dan infrastruktur?
Apakah node.js terutamanya pandai jika kamu mengetahui?
[Jeda]
Beberapa perkara?
Tidak? Yeah?
>> Menyampaikan mesej.
>> Jadi, menyampaikan mesej.
Jadi, itu benar dan ia benar atas sebab-sebab yang lebih teknikal
dan bahawa node.js dan benar-benar JavaScript adalah terutamanya
juga sesuai untuk tak segerak kod,
jika mana anda membuat ilusi
menjalankan pelbagai perkara sekaligus.
Jadi, walaupun mereka benar-benar berlaku secara bersiri,
sesungguhnya dalam kebanyakan kes, JavaScript kedua-dua pihak pelanggan
dan sebelah pelayan Thread tunggal.
Yang jika anda mengambil 161 atau 61 bermakna -
program ini tahu,
jurubahasa boleh betul-betul hanya melakukan satu perkara pada satu masa.
Tetapi ini tidak besar untuk sesuatu seperti pelayan web
di mana anda mungkin mempunyai berpuluh-puluh atau beratus-ratus atau mungkin beribu-ribu
dari pengguna semua cuba kepada halaman Web anda
pada masa yang sama.
Dan lagi, yang mencadangkan yang mengendalikan mereka satu
selepas lain selepas lain terutamanya jika beberapa
permintaan mereka seperti yang kita lihat di CNN mungkin memerlukan berkhidmat
sehingga 300 fail sebelum anda malah mendapat ke pengguna seterusnya
yang mahu melihat yang mengatakan berita.
Node.js adalah lebih sesuai untuk persekitaran seperti itu.
Kerana apa yang berlaku ialah apa-apa proses berjalan perlahan
seperti membaca fail dari cakera atau pertanyaan pangkalan data atau bercakap
kepada beberapa server rangkaian yang lain,
yang cenderung untuk mempunyai kependaman, bukan?
Jika anda telah mengambil 61 atau 161 terutama semua seperti ini
perkhidmatan periferal cenderung untuk menjadi lebih perlahan
melakukan apa-apa daripada bahagian dalam RAM yang sama dan CPU yang sama
yang berkata dalam kes ini, server sebenarnya berjalan.
Tetapi apa yang baik tentang node.js adalah bahawa anda boleh -
dan JavaScript lebih umum adalah bahawa anda boleh melakukan sesuatu yang
dan kemudian berkata, "Hmm, ini akan
untuk mengambil saya beberapa milisaat atau beberapa saat.
Biar saya jenis garpu yang luar, " tetapi ia bukan satu proses yang benar.
Dan kemudian apabila ia dilakukan melakukan proses berjalan yang perlahan
seperti meraih baris dari pangkalan data atau membaca fail. html
dari cakera, ia akan kembali kepada saya dan bukan
daripada saya perlu menunggu untuk itu.
Jadi, untuk membuat ini lebih jelas.
Ini adalah cara saya membuat ini lebih akrab.
Baiklah, jadi ini adalah Goncang Shack di dataran.
Ini adalah jenis paradigma biasa
untuk menjelaskan asynchronicity.
Ini sebenarnya yang baik misalnya kerana Shake Shack
dan Burger Lazat adalah amat memperlahankan untuk apa yang mereka lakukan.
Tetapi persoalannya adalah mereka benar-benar baik pada mengambil pesanan
dan mengambil wang anda selepas yang anda menunggu untuk makanan.
Jadi, ini sebenarnya adalah lebih baik reka bentuk daripada alternatif.
Kerana andaikan anda berjalan ke kedai seperti ini dan anda mendapat
ke hadapan garisan dan anda pesanan anda dan anda mahu
untuk burger, sebagai sebaik mungkin memberitahu, ia mengambil masa sekurang-kurangnya lima
atau lebih minit untuk benar-benar mendapatkan burger.
Jadi, ia akan menjadi jenis model perniagaan yang buruk
jika ketika anda menunggu untuk anda burger, Alice [ejaan diandaikan]
dan Bob [diandaikan ejaan] dan Charlie [ejaan diandaikan]
dan orang lain adalah beratur di belakang anda
dan anda betul-betul menyekat baris menunggu makanan anda.
Jadi jelas, di Shake Shack
dan makanan segera tempat-tempat yang tidak melakukan ini,
mereka melakukan sesuatu seperti ini.
Mereka memberi anda pembaz.
Dan mereka jenis menghantar anda dalam perjalanan anda.
Dan mereka memanggil anda balik oleh membuat perkara ini sedikit bergetar
atau flash untuk mendapatkan perhatian anda.
Jadi, ini adalah betul-betul apa?
Sesuatu seperti node.js tidak.
Jika node.js atau JavaScript secara umum digunakan
dan pengaturcara ini cukup pintar
sedar, "Anda tahu apa?
Apa sahaja yang saya perlu berbuat baik di sini boleh mengambil beberapa bilangan
milisaat atau saat.
Anda tahu apa?
Biar saya pergi ke hadapan dan tidak memanggilnya serentak -
"Yang lelaki menyekat semua orang di talian, "-
biarlah saya pergi ke hadapan dan jenis meminggir
dan hubungi saya kembali
apabila itu berjalan lama operasi selesai. "
Dan memanggil semula kursus adalah merujuk dalam kes ini
ke fungsi panggil balik, yang merujuk kepada chuck kod
yang akan mendapatkan dilaksanakan apabila burger anda siap,
sama seperti perkara ini mempunyai beberapa jenis fungsi terbina dalam
ia bermula bergetar atau meriah apabila tiba masanya untuk anda
akan dipanggil balik untuk hadapan baris.
Jadi, apakah ini bermakna dari segi sebenar?
Nah, kita perlu bekerja cara kita ke atas.
Jadi, biarlah saya pergi ke hadapan dan melakukan ini pertama.
Dalam pelayan-1.js, saya pertama memudahkan kod
supaya kita boleh mengambil langkah-langkah bayi ke arah masalah yang lebih menarik.
Ini adalah sama tepat program yang saya tulis sebelum ini.
Namun, apa yang berubah?
Ada semacam sedikit perbezaan sintaksis
antara ini dan versi 0 sebentar tadi.
Apa melompat keluar di anda jika anda masih ingat?
Yeah Cynthia [diandaikan ejaan]?
[Didengar Catatan]
Yeah. Jadi sekarang, kami mempunyai garis fungsi yang diluluskan masuk
Kami telah mendapat menghapuskan perkara yang
daripada uselessly dinamakan fungsi pengendali.
Sia-sia sahaja di bahawa sebelum walaupun ia memanggil di satu tempat,
Saya tidak benar-benar perlu membuang masa memberikan nama
dan menjadikannya lebih sukar untuk membaca kod di atas ke bawah.
Jadi, mari kita hanya mengisytiharkan sebaris adalah fungsi tanpa nama.
Dan saya melakukan dua perkara lain.
Saya membuat lebih baik penggunaan tatatanda dot.
Jadi seperti dalam jQuery, banyak nod kaedah boleh dirantai bersama-sama.
Supaya apabila anda selesai memanggil sesuatu, anda tidak perlu
menunggu untuk barisan baru dan panggilan kaedah yang lain,
anda boleh hanya rantaian mereka bersama-sama.
Jadi dengan cara ini, kita boleh benar-benar mengetatkan ini sehingga.
Jadi, ini adalah betul-betul pelayan web dalam lima baris
daripada jumlah kod tidak seperti -
tidak seperti apa yang anda mungkin biasanya perlu lakukan untuk menetapkan sesuatu sehingga.
Jika saya pergi ke pelayan 2 sekarang, mari kita melakukan ini.
Dalam pelayan 2 - sebenarnya mari kita kembali ke pelayan 2.
Mari kita kini membuka Async-0.js dan menangani masalah yang di tangan.
Jadi pertama, mari kita pergi hadapan dan terbuka
sehingga Async-0.js dalam pelayar.
Jadi Async-0, biarlah saya pergi belakang untuk pelayar.
Hit tambah nilai.
Dan sekarang, ini adalah jenis mesej ralat.
Sesungguhnya saya melihat 500 dalam inspektor Chrome.
Tetapi biarlah saya lebih tepat meminta hello.txt.
OK. Jadi, ini seolah-olah bekerja.
Jadi Async-0.js nampaknya tidak menghidangkan sesuatu untuk palang.
Ia tidak mempunyai sokongan fail lalai.
Tetapi jika saya jelas meminta hello.txt,
yang seolah-olah menyokong.
Mengapa?
Nah, apa yang saya pergi di sini
dan dilakukan dilaksanakan pelayan web super mudah
yang menunjukkan di mana asynchronicity boleh berguna.
Dan yang dilaksanakan seperti berikut.
Pertama, saya menggunakan Modul HTTP lagi,
tetapi juga FS yang mungkin bermaksud?
Secara umum di CS, sistem fail.
Sistem fail OK.
Oleh itu sebagainya FS, sistem fail.
Baiklah, jadi apa adakah ini memberi saya?
Fungsi yang berkaitan dengan fail seperti mendapat diluluskan,
fail membuka, menulis direktori, direktori membaca
dan semua jenis barangan.
Jadi sekarang notis, kod ini adalah sama seperti sebelum ini,
mewujudkan pelayan, lulus dalam fungsi tanpa nama.
Ini adalah jenis sewenang-wenangnya.
Ini bukan satu yang pelayan web yang selamat.
Malah, anda boleh mengakses paling fail apa-apa pada cakera keras saya
atau pada pelayan ini keras memandu dengan melaksanakan kod ini
kerana saya hanya membuta tuli menganggap bahawa saya akan
untuk merebut apa sahaja pengguna diminta dalam URL.
Dan saya akan awalan dengan dot
supaya saya sedikit yang selamat
dengan mengatakan apa sahaja fail yang mereka boleh permintaan mempunyai sekurang-kurangnya permulaan
dalam direktori semasa.
Sudah tentu ada ancaman di sini.
'Sebab jika mereka sebaliknya termasuk apa?
Dalam laluan mereka, mereka boleh jenis daripada bekerja di sekitar itu juga.
Dot, dot, bukan?
Jadi, jika pengguna hanya meletakkan titik, dot dalam URL, dalam teori,
mereka boleh mula mendapat saya - dan berkata fail kata laluan.
Jadi, ini tidak bermakna yang akan diperolehi,
ia bertujuan untuk menjadi mudah.
Jadi di sini, saya mempunyai pembolehubah yang adalah keadaan jalin-menjalin dot
yang merupakan direktori ini dan permintaan URL
yang kita lihat sebelum Adakah seperti mengurangkan atau / hello.txt.
Jadi sekarang, ia mendapat sedikit lebih menarik.
Pertama, notis bahagian bawah.
Saya mendengar pada pelabuhan sama seperti sebelum ini.
Jadi yang menarik sebenar kerja adalah di dalam sini.
Setiap kali permintaan datang dalam oleh sifat
kod ini, apa yang saya lakukan?
Saya memanggil fail kaedah membaca fail sistem,
lulus dalam jalan yang yang saya hendak baca.
Dan sekarang, ini adalah apa yang menarik di sini,
ini adalah dengan pelaksanaan dalam kaedah tak segerak.
Anda tidak boleh mendapatkan pulangan yang nilai dari fail dibaca.
Malah notis, terdapat ungkapan tidak kiri
di sebelah kiri fail dibaca.
Ia tidak mengembalikan nilai.
Sebaliknya, ia memerlukan satu panggil balik berfungsi apabila ia bersedia
untuk memberikan anda kembali jawapan.
Jadi sekali lagi untuk mengetahui dengan jelas manakala dalam tadi,
dalam banyak pengaturcaraan bahasa, jika anda mahu
untuk membaca fail kes di titik PHP,
file garis bawah mendapatkan menekankan kandungan,
anda mempunyai ungkapan kiri dalam semua nilai selepas -
sebelum tanda yang sama, yang bermakna anda memberikan
kepada pembolehubah bahawa pulangan nilai fungsi itu.
Anda boleh melakukannya dalam node.js, tetapi anda biasanya mempunyai
untuk memanggil jelas segerak versi fungsi suka,
Saya rasa ia membaca sync fail atau sync membaca fail.
Saya terlupa bagaimana mereka menamakannya.
Dan yang akan memberikan anda nilai pulangan.
Tetapi jika fail yang ada di beberapa sistem fail jauh
atau cakera hanya secara semula jadi lambat, ia boleh mengambil masa 10 milisaat
atau 2 saat untuk fail yang untuk benar-benar kembali.
Sementara itu, ada web lain pelawat sedang diservis
oleh websit anda.
Anda menyekat.
Itulah apa yang dipanggil menyekat IO, input / output.
Jadi di sini, ini adalah lebih bijak.
Kerana apa yang node.js akan
lakukan apabila mentafsirkan adalah berikut,
ia akan memanggil kaedah fail membaca,
cuba untuk satu sehingga fail siapa yang mendapat jalan yang ditentukan oleh nilai P.
Dan kemudian jika dan apabila ia bersedia untuk memberikan anda kembali kandungan
fail P, ia akan memanggil fungsi yang tandatangan adalah
oleh konvensyen yang berikut.
Dua hujah, yang pertama yang mungkin objek ralat,
modal E, ia objek dipanggil Ralat atau Nol
jika tidak ada kesilapan.
Dan hujah kedua - mengambil meneka - akan menjadi apa?
Ia dipanggil data jelas tetapi apa yang data lebih kukuh?
>> Kandungan?
>> Kandungan hello.txt dalam contoh yang saya ditarik
sehingga dalam pelayar saya sebentar tadi.
Jadi dalam erti kata lain untuk membaca fail dan banyak node.js fungsi
seperti di tidak kembali nilai-nilai.
Mereka memanggil panggilan balas dan lulus
kepada orang-orang panggilan balas apa yang akan secara tradisional yang
kembali nilai.
Yang terbalik pendekatan ini ialah
bahawa anda mungkin panggilan membaca fail T0 a.
Fungsi panggilan balik kekuatan tidak dipanggil satu mata kemudian
jadi untuk bercakap di T, ia mungkin dinamakan T1000 yang,
ribu yang kutu kemudian.
Tetapi persoalannya adalah bahawa Selebihnya kod dalam fail ini,
jika ada akan segera dilaksanakan manakala node.js
dan manakala sistem fail angka bagaimana untuk membaca
fail dan mendapatkan ia menyokong kepada anda.
Jadi anda membuat ini -
dengan berkesan ilusi
keselarian sementara membiarkan proses berjalan perlahan tidak
menghalang bahan yang penting, bahagian yang memberi perkhidmatan kepada pengguna.
Jadi, bagaimana kita menangani ini?
Ini adalah perkara biasa paradigma node.js.
Dan ada cara hanya untuk memudahkan ini kita akan melihat sebelum bersama.
Saya mula-mula diperiksa jika Ralat tidak null.
Jadi, jika ia bukan palsu kemudian ada ralat.
Saya tidak tahu apa yang, mungkin fail tidak wujud.
Saya tidak mempunyai kebenaran.
Pathname adalah salah.
Apa-apa bilangan perkara boleh berlaku.
Buat masa ini, saya akan sewenang-wenangnya memulangkan 500
yang ralat pelayan dalaman.
Sesuatu telah berlaku.
Saya tidak benar-benar mengambil berat untuk mendiagnosis.
Jadi, mari kita hanya memberitahu pengguna ia pecah.
Dan kemudian, saya akan untuk melakukan res.end,
dan ini adalah notasi trengkas.
Ingat bahawa lalu masa saya res.write
dan kemudian saya res.end.
Jika anda hanya mahu menghantar satu baris output,
anda hanya boleh melakukan semuanya sekaligus dengan res.end dengan hujah,
dan itu akan menghantar apa jua mesej ralat adalah
di dalam objek ini untuk pelayar.
Ia cukup pengarkaan ingat sebentar tadi.
Saya tidak tahu apa ini bermakna pada pandangan pertama.
Tetapi apabila saya meminta fail yang tidak wujud -
oops, kita perlu untuk menjalankan pelayan itu lagi.
Apabila saya diminta fail yang tidak wujud, EISDIR,
jadi sesuatu tentang ia menjadi direktori,
jika saya melakukan rawak tali di sana,
nampaknya ini bermakna fail tidak wujud.
Dan itu kerana kod saya hanya berkata untuk menulis
apa sahaja yang mentah Mesej ralat ialah,
friendly sehingga tidak sangat user tetapi sekurang-kurangnya saya menanganinya.
Lagi, jika itu bukan satu kesilapan apa yang saya lakukan?
Perkara yang sama seperti sebelum ini meludah keluar 200 OK, dataran -
teks / jenis fikiran kosong dan kemudian meludah keluar data.
Dan itulah sebabnya saya mendapat kandungan hello.txt yang hanya
untuk mengesahkan jika saya melihat di hello.txt,
ia benar-benar hanya hello, dunia.
Dan jika saya berubah ini hello, dunia, menyimpan fail,
memutarkan lagi pelayan, memuat semula halaman.
Sekarang, saya mendapatkan versi itu.
Jadi, saya telah benar-benar hanya reimplemented pelayan web
seperti yang wujud banyak tahun tetapi menggunakan node.js.
Tetapi kita boleh melakukan ini lebih bersih.
Izinkan saya membuka Async-1.js.
Sekarang, notis saya menambah modul lain masa ini,
nampaknya modul jalan.
Sekarang, ini adalah baik yang peluang untuk melihat
apa dokumentasi kelihatan seperti.
Node.js adalah dokumentasi.
Seperti PHP saya fikir adalah sebenarnya cukup baik
dan lurus ke hadapan.
Jika saya pergi ke node.js dan Google dan mencari jalan node.js,
apa yang anda akan melihat biasanya adalah pautan terus ke URL yang
yang saya di sini sebentar tadi.
Jadi / api adalah tempat rasmi untuk pergi untuk dokumentasi.
Dan apa yang anda akan melihat di bahagian atas
dokumentasi rasmi nod ini adalah semua kaedah dan
atau harta dalam modul ini khususnya,
salah satu yang dipanggil menyertai.
Dan menyertai adalah fungsi pembantu yang akan membenarkan saya
untuk tidak mengganggu dengan semua plus.
Dan ia telah ditambah bonus kerana anda akan melihat
dari dok adalah ia juga menormalkan jalan yang terhasil.
Jadi, jika pengguna atau anda mempunyai titik-titik atau titik titik atau apa-apa gabungan
daripada orang-orang jenis relatif laluan, antara upsides
kaedah menyertai ialah ia akan membersihkan semua bahawa sehingga
dan memberi anda berkanun yang jalan tanpa sebarang
dari orang-orang titik atau titik titik.
Jadi, ia adalah satu perkara yang baik dalam am bagi keselamatan sekurang-kurangnya
jika anda memeriksa mengembalikan nilai yang saya tidak
dalam kes ini mudah tertentu.
Tetapi saya mahu menggunakannya.
Jadi, saya kini membuat jalan yang satu sedikit lebih programatik
dengan path.join sebaliknya daripada dinamika mentah.
Jadi, itulah sedikit lebih bersih daripada sebelum ini.
Dan kini melihat saya menjadi sedikit lebih bijak dan bukan
daripada hanya membuta tuli cuba untuk membaca fail,
Saya akan benar-benar memanggil fs.stat.
Jadi, jika anda sudah biasa
dengan peringkat rendah C fungsi dan C, walaupun PHP.
Banyak perpustakaan mempunyai fungsi ini stat pulangan
statistik dasarnya pada fail, saiz fail,
kebenaran, nama dan perkara-perkara seperti itu,
dan juga secara tersirat jika fail wujud atau tidak,
dan jika ia adalah satu fail atau direktori
atau pautan simbolik atau sesuatu yang lain.
Jadi sekarang notis, saya memanggil fs.stat.
Dan kemudian nampaknya mengikut untuk dokumentasi,
Saya perlu mendapatkan kembali objek Ralat
atau Nol diikuti oleh objek statistik.
Tetapi mari kita lihat ini, node.js.fs.
Berikut adalah fail dokumentasi sistem.
Biar saya mencari statistik.
Terdapat banyak lagi fungsi di sini.
Oops, yang selari stat, fs.stat.
Jadi di sini, ia tak segerak Statistik (2).
Itu bermakna jika anda ingat dari laman utama,
bab 2 halaman utama,
ini bermakna ini adalah betul-betul hanya pelaksanaan nod
tahap rendah yang fungsi sistem stat.
Jadi, panggilan balik mendapat dua hujah, kesilapan dan stat
mana stat adalah fs.stats membantah.
Jadi mari kita lihat apa objek ini sepatutnya kelihatan seperti.
Mari kita klik pautan yang dan saya melihat bahawa.
Objek statistik mengandungi nampaknya beberapa kaedah penolong,
adalah fail, direktori, adalah sekumpulan perkara-perkara lain.
Ini adalah "adalah" fail yang saya mengambil berat kira-kira dalam kes ini.
Jadi di sini saya pergi.
Jika terdapat kesilapan, biarlah saya hanya diikat jamin masa ini
dan mengambil alih.
Jika ada kesilapan, ia adalah mungkin fail 404 tidak dijumpai.
Ia boleh menjadi sesuatu yang lain
tetapi saya menjadi sedikit malas di sini hanya untuk memberi tumpuan
mengenai butir-butir yang lebih menarik.
Tetapi untuk pengguna ini tujuan, fail tidak dijumpai,
jika terdapat sebarang kesilapan menyatakan fail.
Jika tidak, saya memeriksa jika file memang fail sebenar.
Jadi, jika ia bukan satu fail, ia wujud.
Ada sesuatu di sana tetapi ia mungkin direktori
atau mungkin pautan simbolik
atau sesuatu yang lain itu funky pada sistem fail.
Cara sama ada, pengguna tidak melihatnya.
Jadi sekarang, saya hanya akan meludah
keluar konvensional yang tidak dibenarkan 403.
Tetapi sekali lagi hanya konvensyen,
Saya boleh digunakan sesuatu yang berlainan dalam teori.
Dan kemudian akhir sekali, biarlah saya cuba untuk membaca fail.
Jadi, biarlah saya tatal ke bawah.
Dan kini notis ini adalah di mana kod itu boleh mendapatkan kemas sedikit,
melihat bahawa saya menyeru fs.readFile berlalu
di jalan yang sama, sama panggil balik masa yang lalu,
jadi versi sebelumnya.
Dan kemudian jika saya mencari -
jika saya tidak merasa, Saya meludah daripada 500.
Dan jika saya merasa, apa yang line kita akan melihat di sini?
Kita akan melihat fs menulis header 200 mungkin
dan res.end menghantar data sebenar.
Tetapi notis ini.
Dan ini bukan demonstratif senario kes terburuk.
Tetapi saya mempunyai panggilan stat ini di sini daripada saya mempunyai beberapa barangan.
Kemudian, saya mempunyai satu lagi panggilan tak segerak di sini,
lekukan jadi lebih.
Jadi, hanya jenis membuat anggaran jika anda boleh dari sini.
Apa masalah cenderung untuk timbul dengan bahasa seperti JavaScript
dalam persekitaran ini di mana anda tidak mempunyai nilai-nilai pulangan
tetapi anda mempunyai panggilan balas ini.
Dan sudah tentu, ini hanya satu perkara yang gaya hakikat
bahawa saya menyimpan Takukan.
Tetapi mengambil ini kepada logik langkah seterusnya.
Katakan terdapat satu atau dua atau tiga fungsi lain
bahawa saya perlu untuk melaksanakan yang adalah oleh tak segerak alam semula jadi,
dan oleh itu anda hanya jenis menyimpan mengensotkannya untuk mengendalikan mereka,
untuk mengendalikan mereka, untuk mengendalikan mereka.
Anda mendapat jenis panggilan balik Neraka seperti orang memanggilnya
di mana kod anda bermula untuk mendapatkan yang sangat luas
dan terus terang benar-benar sukar untuk dibaca.
Oleh kerana, saya boleh jenis hampir tidak memberitahu bahawa ini adalah jenis aliran
yang mempunyai jenis ini
daripada segi gaya bersudut perkara berlaku di sini.
Jadi, ini tidak sesuai kerana ini dengan cepat boleh menjadi
dikawal, walaupun dua tak segerak tidak panggilan
apa-apa masalah besar.
Jadi, kita boleh mengelakkan ini, bukan?
Anda mungkin telah celah yang Saya misclicked sebentar tadi.
Dalam dokumentasi, anda tahu, ia kelihatan seperti ada statSync.
Dan statSync tidak mengambil satu panggilan balik sebagai hujah.
Ia mengambil masa hanya jalan kerana ia nampaknya tidak apa?
Ia akan kembali contoh satu daripada fs.stats.
Jadi ini mungkin anda naluri pertama, bukan?
Terutamanya jika fungsi panggil balik
dan asynchronicity adalah sedikit baru untuk anda, terus-terang,
Pendekatan yang paling mudah mungkin hanya mengelakkan masalah ini semua
bersama-sama, kembali untuk menyusun pengaturcaraan gaya CS101
di mana anda memanggil fungsi atau kaedah, mengembalikan nilai,
memanggil fungsi, pulangan nilai,
fungsi, mengembalikan nilai.
Dan saya boleh menggunakan itu fs.statSync
yang betul-betul yang sama tetapi ia adalah versi segerak
yang bermaksud ia kembali nilai.
Ia tidak lulus menghargai untuk panggil balik.
Tetapi mengapa yang mungkin menjadi workaround suboptimal mengambil jalan keluar
dengan fungsi segerak?
Yeah?
[Didengar Catatan]
Tepat, ia mengambil masa yang lama.
Anda hanya perlahan semua turun.
Kerana sama seperti Shake Shack atau Burger Sedap, jika mereka tidak perlu lagi ambil
dari orang-orang buzzers dan menjadikan kamu, pelanggan berdiri di bahagian hadapan
garis sehingga makanan anda bersedia walaupun sebelum mengambil perintah itu
daripada orang yang di belakang anda jelas
melalui meletakkan melambatkan.
Orang mula meninggalkan, anda jenis menarik paket.
Anda boleh membuat apa-apa bilangan daripada analogi di sini.
Tetapi dalam ringkas, ia adalah mungkin tidak satu perkara yang baik
untuk perniagaan atau untuk pelayan.
Kod Jadi tak segerak adalah biasanya baik sekurang-kurangnya
dalam kes ini, tetapi ia pasti mula menyebabkan beberapa angst.
Dan sebenarnya saya berani mengatakan apabila pertama menulis barangan ini,
ia akan mengambil sedikit sedikit untuk membiasakan diri.
Jadi, mari kita mulakan untuk melengkapkan anda dengan beberapa perpustakaan
dan teknik untuk membuat ini sedikit lebih mudah.
Jadi, salah satu yang paling biasa perpustakaan adalah perpustakaan popular
hari ini, ini satu dipanggil async.js.
Dan seperti banyak node.js perpustakaan atau modul,
semua ini adalah sumber terbuka.
Mereka hampir semua hidup dan mendapatkan repositori pusat yang jenis
daripada menjadi de facto meletakkan untuk menyimpan perkara-perkara ini.
Dan kemudian ada yang infrastruktur keseluruhan
untuk memasang perkara-perkara ini dipanggil NPM, Nod Pakej Pengurus
yang jika anda biasa dengan EvanTube adalah jenis
aplikasi seperti aplikasi atau mendapatkan.
Jika anda biasa dengan Red Hat dan Fedora
seperti dalam perkakas, rasanya yum.
Tetapi ia nod - ia pengurus pakej hanya
untuk persekitaran tertentu.
Jadi, kita boleh memuat turun dan memasang perkara seperti perpustakaan Async yang
dan juga salah satu lagi yang dikenali sebagai menekankan perpustakaan atau modul.
Tetapi ini fs sejauh, HTTP, jalan,
mereka semua datang dimasukkan ke dalam nod.
Jadi, jika kita pergi ke docs API, anda sebenarnya akan melihat yang membina
ke dalam nod anda mendapat secara percuma sejumlah besar modul.
Tetapi banyak orang yang baik ke atas internet telah membuat berpuluh-puluh
jika tidak beratus-ratus perpustakaan lain
untuk melakukan sesuatu yang lebih baik atau berbeza.
Jadi, mari kita lihat bagaimana perpustakaan ini berfungsi.
Jadi, kebanyakan Kod ini adalah merupakan sama untuk masa ini.
Saya mempunyai laluan yang dicipta sehingga atas.
Dan kini saya menyeru async.series.
Jadi perpustakaan Async, ia hanya sebuah perpustakaan yang membolehkan anda
untuk lulus atau meningkatkan biasanya daripada fungsi untuk dipanggil salah
selepas lain hanya untuk jenis mengelakkan isu lekukan,
dan benar-benar hanya mental angst yang selalunya akan timbul
sekurang-kurangnya apabila anda mula-mula menyelam dalam ke ini sendiri
dengan pengaturcaraan tak segerak.
Seperti dalam mengenepikan, jika anda telah mengambil 161 dan anda telah diuruskan dengan kunci
dan meningkatkan keadaan dan semua daripada itu, kod tak segerak
dan persekitaran seperti node.js sebenarnya banyak,
boleh dikatakan lebih mudah
daripada sebenarnya menulis kod multithreaded.
Bila-bila masa anda mempunyai kod multithreaded,
anda mempunyai syarat-syarat kenaikan.
Anda perlu bimbang tentang dua benang yang mengandungi
untuk sumber yang sama cakera atau ingatan.
Keindahan JavaScript
dalam node.js adalah ada secara literal hanya satu thread,
yang bermaksud pelayar
atau pelayan hanya boleh melakukan satu perkara pada satu masa.
Ia hanya terpulang kepada anda, pengaturcara
menyimpan model mental untuk bagaimana anda jenis beratur perkara
dan memikirkan bagaimana untuk memerintahkan kod anda.
Tetapi anda tidak perlu bimbang kira-kira menaikkan syarat
agak dengan cara yang sama di kurangnya dengan kod mentah seperti ini.
Jadi, ia sedikit sukar untuk grack sini.
Tetapi - Jadi biarlah saya membuka docs untuk seketika.
Perpustakaan async.js yang juga sangat googleable,
ia tinggal di GitHub repot seperti banyak daripada mereka.
Jangan fikir ia lengkap, ia tidak.
Biar saya tatal ke bawah kepada Read Me sini.
Jadi, perpustakaan Async menyediakan sejumlah
kaedah di dalamnya.
Sebagai contoh, ada kaedah yang disebut setiap,
yang jika saya klik ini hanya untuk melihat docs untuk seketika,
ini adalah fungsi atau kaedah yang membolehkan anda untuk melakukan sesuatu
seperti empat masing-masing tetapi selari.
Mereka semua akan berlaku berpotensi selari.
Dan kaedah yang setiap hanya akan kembali kepada anda apabila semua
daripada lelaran adalah lengkap.
Jadi mungkin ia berlaku satu demi satu.
Sebaik-baiknya, ia berlaku asasnya selari.
Tetapi kaedah yang tidak memanggil anda balik.
Ia tidak buzz anda buzzer sehingga semua
unsur-unsur anda mempunyai terlelar lebih telah selesai.
Jadi, ia hanya cara yang bagus
mengelakkan menggunakan empat gelung mudah
tetapi sebenarnya melakukan sesuatu yang tak segerak.
Tetapi kini lebih langsung yang berkaitan dengan contoh ini,
notis ada ini kaedah siri.
Dan biarlah saya hanya tarik satu contoh berkanun mudah.
Jadi perpustakaan Async, siri kaedah mengambil sebagai tersirat
oleh kurungan persegi di pelbagai.
Apakah data yang jenis unsur-unsur
dalam pelbagai ini berdasarkan pada contoh yang mudah?
Ini adalah pelbagai fungsi.
Jadi, dalam C, anda akan memanggil mereka berfungsi dengan petunjuk.
Dalam JavaScript, terdapat lebih rujukan dengan betul dengan fungsi
atau fungsi tanpa nama.
Dan ini hanya bermaksud, tatasusunan
sudah tentu yang diperintahkan dari sifar di atas.
Jadi, mereka telah mengekalkan suatu perintah yang baik
untuk siri, 'menyebabkan siri sudah tentu cara melakukan sesuatu
agar tidak selari.
Jadi, ini hanya bermakna bahawa ini fungsi akan mendapatkan dilaksanakan,
maka satu ini, maka ini satu, yang satu ini, maka yang satu ini,
bagaimanapun banyak terdapat
sehingga akhirnya pilihan panggilan balik dipanggil.
Jadi, notis paradigma di sini.
Dan walaupun ini perpustakaan salah seorang lelaki itu,
ia wakil sangat biasa JavaScript paradigma
daripada sekali lagi menggunakan panggilan balas.
Jadi, notis apa yang anda lakukan di sini.
Pada majlis yang pertama menjadi diluluskan pada melalui pelbagai ini,
anda ditakrifkan tanpa nama fungsi hanya dengan fungsi.
Tetapi notis bahawa nampaknya mengikut dokumentasi ini,
bahawa fungsi tanpa nama perlu mengambil panggilan balik hujah.
Yang akan menjadi penunjuk atau rujukan ke fungsi
yang kamu boleh katakan apabila anda kod bersedia untuk mengembalikan nilai.
Jadi sekali lagi, tidak seperti hanya pengaturcaraan biasanya prosedur
di mana anda digunakan untuk kembali nilai-nilai serta-merta
yang satu perbezaan dengan menggunakan perpustakaan seperti ini
dalam pengaturcaraan tak segerak lebih secara amnya, adalah apabila anda sudah bersedia
untuk kembali nilai dari pangkalan data, dari fail,
dari aritmetik satu bersuara, ia terpulang kepada anda
untuk memanggil fungsi panggil balik itu.
Dan perkara yang baik mengenai perpustakaan ini
jika kita membaca docs lebih berhati-hati ialah,
jika dan hanya jika semua kawasan panggilan balas yang dipanggil
tanpa objek ralat, akan segala-galanya berjaya?
Jadi dalam erti kata lain, jika terdapat 2,
jika terdapat 10 tanpa nama fungsi
dalam pelbagai ini maka dalam siri ini,
hanya jika semua daripada mereka berjaya,
akan panggil balik pilihan terakhir dianggap berjaya?
Jika salah seorang daripada mereka gagal, setiap fungsi
selepas ia tidak akan walaupun dilaksanakan.
Jadi, ia adalah cara yang bagus jenis yang mempunyai rantaian daisy
yang akan berhenti terlalu awal jika ada masalah.
Jadi untuk melihat ini dalam konteks, di sini adalah bagaimana kita boleh melaksanakan semula
bahawa program sebelumnya.
Saya mendapat jalan yang seperti sebelum ini, jadi ini adalah bahagian yang mudah.
Saya meniru paste kod rangka ini
dari dokumentasi yang terdapat async.series kurungan terbuka,
membuka kurungan persegi.
Dan kini sedar saya mempunyai satu fungsi pada mulanya ini
kedua, kita akan melihat di mana kita pergi dari ini.
Dan kini melihat, ia adalah satu sedikit kompleks pada mulanya
tetapi memberi tumpuan hanya pada ia beratur demi baris.
Fs.stat bermakna mendapatkan statistik atau apa yang tidak daripada jalan itu.
Memanggil panggilan balik ini apabila bersedia.
Kod ini adalah sama seperti sebelum ini.
Jika ada kesilapan, ada satu perbezaan sekarang.
Sekali lagi, paradigma yang biasa dalam pengaturcaraan node.js adalah
jika ada masalah dan panggilan balik perlu tahu
bahawa dengan konvensyen, yang pertama hujah untuk panggil balik akan
tidak ada, jika semuanya berjalan dengan lancar atau rujukan kepada objek ralat,
modal E. Ia seperti Ralat satu kelas yang wujud di peringkat global
tetapi lebih kepada yang beberapa masa yang lain.
Jadi dengan cara ini, jika ada satu kesilapan, apa yang implikasi?
Nah berdasarkan apa yang saya berkata siri tidak,
adalah jika ada masalah salah, kita hanya jenis mahu
untuk membatalkan seluruh siri fungsi tanpa nama panggilan.
Jadi, ia mencukupi bagi saya untuk hanya kembali panggilan balik yang berlalu
objek Ralat.
Kerana jika stat memberi saya kembali kesilapan,
Saya boleh mencipta yang baru Objek kesilapan saya sendiri,
tetapi saya tidak benar-benar mengambil berat untuk,
Saya hanya mahu lulus apa sahaja yang kesilapan yang benar-benar berlaku
jadi saya boleh memindahkannya untuk panggilan balik ini.
Dan hanya untuk menjadi jelas, pulangan tidak tegas perlu.
Saya pada dasarnya mahu melakukan ini tetapi saya mahu sekarang jangan "kembali;
/ / Supaya tidak lebih kod di sini melaksanakan ".
Jadi sekali lagi satu lagi biasa konvensyen dalam JavaScript,
walaupun anda tidak kembali nilai per se,
anda mahu meluangkan nilai untuk fungsi panggil balik yang
tetapi kemudian anda mahu untuk menghentikan pelaksanaan
fungsi anda dalam cara yang remeh
untuk melakukan ini adalah hanya untuk memanggil kembali ke sini.
Tetapi tiada apa-apa yang salah,
kami hanya melakukan pulangan panggilan balik ralat walaupun ia akan
untuk kembali nilai ditentukan.
Baiklah, ini tidak kembali nilai yang paling mungkin.
Semua saya mengambil berat tentang adalah menaiki pelaksanaan selanjutnya.
Jadi, conflation saya ini dua baris hanya stylist
kepada konvensyen hanya untuk mempunyai bilangan baris
kod saya hanya menulis 2-1.
Jadi apa lagi?
Jika tidak ada kesilapan -
sebenarnya perlu jelas Saya juga dapat mengelakkan
bahawa dengan berbuat jika lain.
Tetapi sekali lagi, satu lagi paradigma biasa cek
atas kesilapan anda sehingga atas dan kemudian hanya kembali daripada terus
untuk mengensot kod anda dengan elses dan elses dan elses.
Jadi, jika ia bukan satu fail, sekarang, anda tahu,
Saya mahu mengendalikan ini kecil yang khas.
Jadi di sini seperti di Jawa atau C + + atau beberapa bahasa lain,
di sini adalah cara boleh instantiate satu membantah menaip ralat yang berlalu
dalam mesej lalai tidak fail
dan ini hanyalah agak sewenang-wenangnya.
Tetapi saya memberi isyarat kesilapan saya sendiri.
Dan apakah ini lepas line mungkin menandakan?
Semuanya berjalan dengan lancar.
Jika anda lulus dalam null bagi parameter kesilapan, yang hanya bermakna
oleh konvensyen semuanya berjalan dengan lancar.
Jadi, ini bermakna apa akan berlaku secara logik?
Jika null diluluskan untuk panggilan semula
yang bermakna ini tanpa nama fungsi telah berjaya
jadi untuk bercakap.
Jadi, apa yang perlu siri kaedah mendahului dan kini lakukan berdasarkan
definisi lisan saya lebih awal?
[Didengar Catatan]
Beralih kepada yang seterusnya, bukan?
Jika ia telah kembali yang bukan nol nilai, ia hanya akan membatalkan
dan tidak lebih tanpa nama fungsi akan mendapat dipanggil.
Tetapi kerana ia mempunyai tidak, maka ini akan mendapat dipanggil akan datang.
Jadi, logik di sini adalah cukup banyak yang sama seperti sebelum ini
dan kita akan melihat bagaimana untuk membersihkan ini lagi dalam seketika.
Saya sedar ini adalah jenis banyak
untuk menyerap semua secara lisan dan visual.
Tetapi sekarang notis, yang kedua fungsi tanpa nama yang saya mahu
untuk melaksanakan dalam siri adalah untuk cuba membaca fail.
Memanggil panggilan balik ini apabila anda sudah bersedia.
Jika ada kesilapan, sila isyarat dengan cara panggil balik yang
supaya seluruh barangan ini akan berhenti.
Lagi null kembali.
Tetapi mengapa saya lulus dalam dua hujah?
Nah kali ini jika saya membaca fail dan kembali
sebagai pembolehubah yang dipanggil data,
Saya mahu bukan sahaja menandakan semuanya berjalan dengan lancar dengan mengembalikan null
untuk perdebatan yang pertama.
Saya mahu kembali sebenar data sebagai hujah kedua.
Kerana jika saya terus membaca dalam dokumentasi,
notis sebahagian ini terakhir kod kurungan persegi bermakna itulah
akhir siri ini.
Terdapat hanya dua tanpa nama fungsi dalam siri ini.
Jika terdapat kesilapan di sini, kemudian Saya tahu bahawa salah satu pautan
dalam rantaian ini supaya untuk bercakap gagal.
Jadi dalam erti kata lain, kesilapan ini akan menjadi objek Ralat
bahawa adalah batal jika ada lelaki ini gagal.
Dan jika itu berlaku, saya hanya akan menyelamatkan dan saya akan
untuk mengatakan 400 yang ertinya permintaan gagal,
itu sangat generik mesej ralat.
Dan kemudian, saya akan mencetak mesej ralat.
Oleh itu, saya tidak mengganggu untuk menjadi dubur super masa ini,
Saya tidak akan membezakan antara 500 dan 404 dan 403,
Saya hanya jenis membuta tuli gelombang tangan saya
dan berkata sesuatu yang salah.
Tetapi jika apa-apa yang telah buat kesilapan,
Saya akan menghantar ini res.end lulus data ini.
Sekarang ini kelihatan sedikit samar.
Tetapi sekali lagi jika saya membaca dokumentasi,
hujah kedua untuk ini, panggilan balik akhir akhir,
lelaki itu hanya dilaksanakan sekali siri itu dilakukan
melaksanakan atau bahagian di sana daripada, ini akan menjadi satu pameran
semua hujah-hujah kedua
yang telah diluluskan untuk panggilan semula.
Kini, ia ternyata bahawa hanya menghubungkan dalam siri ini
yang benar-benar kembali kepada kedua hujah yang satu ini di sini.
Jadi saya akan menyusun daripada pada lompatan iman hanya menggunakan andaikan
seketika bahawa terakhir adalah kaedah yang
yang memberikan anda yang terakhir elemen array.
Oleh kerana pelbagai ini itu yang diluluskan
kepada saya mempunyai dua indicies, sifar dan satu.
Ia hanya sifar tidak mempunyai nilai kerana lelaki ini kembali -
tidak lulus dalam kedua hujah tetapi lelaki ini tidak.
Jadi keputusan kurungan sifar adalah apa-apa,
keputusan kurungan satu mengandungi apa,
jika anda telah mengikuti bersama-sama sehingga ke tahap ini?
Fail, hello yang, kandungan dunia mungkin,
jadi itulah bagaimana saya sebenarnya mencetaknya.
Dan biarlah saya selesai satu terperinci di sini.
Jika saya seperti ini lama sekolah, jika saya mahu mendapatkan
pada elemen lepas, jika saya boleh melakukan results [results.length-1],
itulah jenis yang cara sekolah lama
mengakses elemen lepas dalam - atau sifar indeks pelbagai.
Tetapi seperti yang di sebelah, ingat bahawa saya mempunyai perpustakaan ini
di sini garis bawah yang oleh konvensyen hanya dipanggil
beribu-garis bawah watak yang tidak khas,
ia hanya kelihatan sejuk seperti tanda dolar tidak untuk jQuery.
Ini hanyalah penolong kaedah menekankan dot lepas
yang betul-betul perkara sama.
Dan jika anda tidak pernah menggunakan ia sebelum menekankan JS kedua-dua
untuk pengekodan sebelah pelanggan
dan sebelah pelayan adalah perpustakaan hebat berguna
bahawa orang-orang seperti yang banyak diterangkan ia suka jQuery mengandungi semua
daripada kaedah, orang mahu datang dengan JavaScript sendiri.
OK.
>> Jadi, seperti cantik kepada saya dan Saya menonton dalam siri ini,
anda mempunyai seperti panggilan balik sebagai hujah?
>> Ya.
>> Seperti apabila anda sebenarnya seperti menolak bahawa dalam,
dan seperti apakah yang bermakna apabila anda hanya mempunyai
seperti panggil balik dan kemudian lakukan seperti -
[Didengar Catatan]
>> OK, soalan yang baik.
Jadi, biarlah saya tarik sehingga laman utama Async sini
atau dokumentasi pada GetHub.
Jadi ini adalah berkanun yang struktur.
Jika anda menggunakan panggilan ini siri cara yang tertentu,
ada dua bahagian yang besar kepadanya.
Satu adalah pelbagai fungsi tanpa nama
dan dua adalah panggilan balik akhir fungsi yang sebenarnya
dilaksanakan sekurang- akhir siri ini.
Sekarang, jika kita zum dalam sedikit lebih dekat pada yang pertama
daripada perkara-perkara besar, pelbagai fungsi tanpa nama
oleh keperluan ini dokumentasi lelaki mempunyai
menjadi tanpa nama fungsi yang mengambil
dalam satu hujah dipanggil panggilan balik atau foo atau bar, tidak kira
tetapi dia memanggil ia pang.
Dan ini adalah jenis pembaz anda yang Shake Shack tangan anda.
Ini adalah cara yang anda boleh kembali nilai yang
kepada pelanggan kerana anda tidak boleh hanya secara literal kembali.
Anda perlu melakukannya dengan cara panggil balik ini.
Kerana jika di dalam ini fungsi beberapa berjalan perlahan
kod seperti Pertanyaan anda, baca fail dari sistem fail,
anda tidak mahu menunggu ada dan menyekat orang lain,
anda mahu panggil panggilan balik itu.
Jadi, ini adalah betul-betul nama hujah.
Tetapi seperti dalam C, anda mempunyai petunjuk fungsi.
Di Jawa anda mempunyai kaedah sistem rujukan
dan yang sama di sini dalam JavaScript.
Ini adalah berbeza tetapi Jenis adalah fungsi.
Jadi hanya dengan menulis namanya sama ada panggilan balik atau foo
atau bar, kemudian buka tanda kurung dan kurungan rapat,
anda melaksanakan yang pada fungsi itu.
Dan lulus null seorang yang bermakna ralat batal dan salah satu
yang bermaksud ini adalah data yang saya mahu lulus masuk
Dan kemudian sebahagian yang jelas, ini adalah panggilan balik yang lain.
Dan ia tidak dipanggil panggil balik,
ia hanya konsep adalah fungsi kaedah panggilan balik
kerana ia dipanggil mengikut definisi
perpustakaan ini penulis apabila seluruh siri telah menyelesaikan
atau subset daripadanya jika satu ralat telah berlaku lebih awal.
Jadi, nama fungsi panggil balik, memanggil fungsi panggil balik,
menamakan fungsi panggil balik, memanggil fungsi panggil balik,
panggilan balik yang berbeza berfungsi semua bersama-sama.
>> Kami kini mempunyai seperti menentukan panggilan balik?
>> Tidak, kerana lelaki ini akan masuk ke dalam pelbagai anda
fungsi tanpa nama,
penunjuk kepada kod dia mahu untuk melaksanakan.
Tepat, baiklah.
Jadi, sila mengatakan bahawa kod mendapat sedikit lebih mudah.
Jadi, ia boleh.
Dan jika anda seperti saya, mengambil keselesaan dalam sekurang-kurangnya mengetahui,
ia mengambil masa untuk mendapatkan digunakan untuk ini.
Tetapi kita boleh membersihkan ini sehingga sedikit,
untuk tidak membuang terlalu banyak pada kepada anda tetapi di sini variasi lain
dan dengan menggunakan kaedah lain
di perpustakaan yang sama dipanggil air terjun.
Yang terbalik daripadanya ialah tidak seperti siri di mana setiap
dari orang-orang tanpa nama fungsi dilaksanakan pada dasarnya
bebas daripada setiap satu daripada yang lain.
Waterfall seperti nama mencadangkan membolehkan fungsi utama sekali
untuk jenis lulus dalam nilai-nilai dengan fungsi yang lebih rendah,
jenis suka lata air.
Jadi terbalik ini ialah saya boleh jenis
daripada menggunakan ini untuk faedah saya.
Dalam async.waterfall, notis berikut.
Saya hanya boleh memanggil fs.stat lulus dalam jalan yang
yang saya mahu untuk mendapatkan statistik.
Dan kemudian ingat sebelum saya mempunyai fungsi tanpa nama
yang mempunyai dua hujah sesat,
esults dan kemudian saya dipanggil fungsi panggil balik secara manual?
Dengan kata lain adalah hanya untuk jelas, ingat bahawa sebelum ini
dalam Async 2, aku buat semua kerja jahat ini.
Saya dipanggil fs.stat diluluskan pada P,
diisytiharkan tanpa nama saya sendiri fungsi.
Saya kemudian diperiksa jika kesilapan tidak batal maka saya lakukan ini,
lagi yang saya lakukan itu, keseluruhannya keindahan berikut konvensyen
seperti dalam node.js adalah panggilan balik yang fungsi amnya adalah bertujuan
untuk mengambil sekurang-kurangnya satu hujah, objek Ralat diikuti dengan sifar
atau nilai-nilai yang lebih berguna.
Jadi notis paradigma di sini,
fungsi panggil balik ini saya mengisytiharkan berikut betul-betul
paradigma yang lelaki ini perpustakaan Async tidak.
Yang mengatakan ini, mengapa saya Saya melaksanakan panggilan balik saya sendiri
kaedah apabila pengarang ini perpustakaan literal menyerahkan saya
ke atas dulang boleh dikatakan, yang fungsi panggil balik yang boleh saya gunakan?
Jadi, saya hanya boleh lulus dalam rujukan dia memberikan saya
supaya dengan segera, beberapa baris saya
kod menjadi satu baris kod.
Sekarang, di mana kita harus pergi dengan ini?
Fungsi seterusnya yang Saya mahu melaksanakan,
tanpa nama seterusnya fungsi dalam pelbagai ini
fungsi tidak berikut.
Notis stat pertama adalah hujah pertama.
Jadi sesuatu yang telah berubah sudah.
Kini, lelaki ini yang menulis perpustakaan -
dan saya katakan lelaki kerana ia adalah seorang lelaki.
Lelaki ini yang menulis perpustakaan ini adalah jaminan dokumentasi
bahawa jika fungsi ini di sini pas saya kembali objek Ralat
atau batal diikuti oleh koma senarai dipisahkan nilai-nilai lain,
dia akan memastikan bahawa orang-orang nilai yang lain adalah tangan
dengan fungsi tanpa nama ini bagi dari kiri ke kanan.
Dan apa yang digunakan untuk hanya fungsi panggil balik sahaja semata-mata
menjadi hujah terakhir tersebut.
Sekarang, saya tidak tahu orang yang saya memberi tumpuan kepada hanya anda tahu.
Tetapi sekarang, apa yang mengambil di sini?
Jadi, kita tahu dari dokumentasi yang
atau pasangan terlebih dahulu daripada contoh-contoh
fs.stat yang akhirnya menjangka satu panggilan balik dengan dua hujah,
objek Ralat yang merupakan Objek kesilapan atau batal diikuti
dengan sebutan mengenai statistik membantah.
Jadi jika saya berfikir tentang itu, Objek Ralat statistik koma membantah,
yang sesuai dalam paradigma perpustakaan ini orang itu.
Jadi, saya hanya boleh mengatakan kerana Saya ada hujah yang kedua
bahawa itu - yang berlaku akan diluluskan oleh fs.stat
untuk panggilan balik adalah sesat, statistik mengikut definisi perpustakaan ini,
Saya boleh meletakkan kedua Nama hujah di sini
atau apa sahaja yang saya boleh menamakan semula
jika saya mahu diikuti oleh panggilan balik di sini.
Jadi, saya boleh lulus satu menghargai dari sini ke sini.
Sekarang, semua kod ini walaupun diakui agak samar adalah
sekurang-kurangnya salinan paste untuk sebahagian besar dari sebelum ini.
Satu-satunya perbezaan adalah notis di sini saya mengisytiharkan Ralat satu
membantah dan sekarang saya mahu untuk mendapatkan sedikit pelamun.
Saya benar-benar mahu tahu apa kesilapan itu telah, jadi saya akan
to tuck di dalam objek ini yang harta sewenang-wenangnya dipanggil kod
supaya saya tahu bahawa ini bukan fail
yang perlu yang tidak dibenarkan, ia adalah satu HTTP 403.
Biar saya ingat bahawa sebelum Saya lulus objek Ralat
untuk panggilan semula.
Dan kemudian akhir sekali cuba untuk membaca fail, jadi dalam kes ini,
air terjun, saya patah kod dari dua langkah besar
kepada tiga langkah yang lebih kecil.
Notis kecantikan di sini,
Yang boleh saya hubungi fs.readFile lulus dalam jalan.
Dan kemudian bahagian yang sukar mental, adalah saya hanya lulus
dalam panggilan balik lelaki itu.
Perkara dia menyerahkan saya, saya akan berpindah kepada fs.readFile.
Kerana kita semua mematuhi kepada konvensyen sama,
hujah pertama yang panggil balik adalah objek Ralat atau batal diikuti
oleh keadaan koma atau dipisahkan senarai barangan yang berguna.
Jadi, apa yang bermakna sekarang dan jika saya baca dokumentasi yang saya akan tahu
ini, panggilan balik yang terakhir, lelaki ini di sini di luar
daripada kurungan persegi akan akan diluluskan dalam objek Ralat
atau nol yang perlu saya periksa seperti biasa dengan kod ini di sini.
Dan kemudian dengan definisi kaedah ini
dalam dokumentasi lelaki itu, nilai terakhir kembali
daripada kaedah yang lepas dalam pelbagai tanpa nama saya -
array saya fungsi tanpa nama.
Jadi, apakah membaca kembali fail
dan saya menggunakan pulangan yang longgar sekarang.
Maksud saya apakah membaca pas fail sebagai hujah
kepada kaedah panggilan balik yang tangan ini?
Dua hujah, pertama ialah objek Ralat atau batal,
yang hampir sentiasa akan jawapannya.
Dan perkara yang kedua akan menjadi apa untuk fail baca?
Kandungan fail, data seperti yang kita memanggilnya lebih awal.
Jadi, dengan hanya mengisytiharkan sesat, menyebabkan,
dan periksa kesilapan ini umpama membosankan sekarang.
Yang lain, saya res.end lulus dalam hasil itu.
Ini akan pasti tidak menyegerak dalam dengan sempurna
sehingga anda benar-benar menulis sendiri.
Tetapi untuk sekarang, mengambil jauh sekurang-kurangnya hakikat
bahawa terdapat nampaknya ini paradigma yang sama, di mana jika kita
dan pengarang perpustakaan semua jenis kayu
dengan konvensyen ini kaedah pang.
Dan hujah pertama adalah objek Ralat atau null.
Dan yang kedua dan ketiga
dan objek keempat adalah perkara-perkara kita mengambil berat tentang dan kita jenis
daripada peraturan- dokumentasi.
Kami bermula dengan kod yang jujur ​​agak hodoh.
Dan walaupun yang paling baru-baru ini contoh ialah terus terang jenis sukar
untuk membalut fikiran anda di sekitar, ia sekurang-kurangnya secara visual,
kelihatan seperti ia lebih ketat.
Dan apabila anda mendapatkan selesa dengan itu, ia lebih mudah
dan ia lebih kurang terdedah kepada pepijat daripada itu contoh sebelumnya.
Jadi, biarlah saya menunjukkan satu perkara terakhir di sini.
Ini adalah versi tiga.
Dan - Tidak, mari kita meninggalkan satu ini sahaja.
Biar saya pergi ke beberapa lain perkara lepas sebagai penggoda.
Baiklah, jadi dalam pelayan 2.
OK. Pertama, apa-apa soalan, Saya tahu ini adalah lebih
tetapi anda mahu lebih arahan, begitu?
Anda tidak mengatakan baik arahan semestinya.
Yeah?
[Didengar Catatan]
Betul, anda pada dasarnya berlembut kepada sistem operasi
untuk memikirkan bagaimana untuk mengimbangi semua bola ini sekaligus,
membaca dari fail, membaca daripada pangkalan data.
Dan ia server JavaScript ini sendiri itulah Thread tunggal.
Dan pada dasarnya dan sebenarnya,
ada satu gambar Saya tidak muntah,
dan ia tidak semestinya semua menyedarkan bahawa
tetapi mungkin kita akan memberikan anda model mental.
JavaScript sendiri dan simpulan
khususnya mempunyai ini yang dikenali sebagai gelung acara.
Di mana, anda boleh berfikir daripada node.js, program ini,
betul-betul seperti gelung tak terhingga.
Ia hanya satu gelung liar, menunggu dan menunggu dan menunggu,
mencari tugas-tugas untuk disiapkan.
Dan tugas itu mungkin, pergi mengambil sesuatu dari pangkalan data
atau di sini adalah nilai daripada pangkalan data atau pergi mendapatkan fail ini
dari cakera atau di sini adalah meminta daripada pengguna.
Apa-apa jenis acara, seperti acara pelayar yang didorong,
supaya pelayan acara sampingan didorong.
Dan mana-mana daripada perkara-perkara merupakan acara.
Jadi seseorang di node.js, hanya menulis satu gelung tak terhingga,
gelung liar besar, menunggu untuk barangan berlaku.
Dan sebagai barangan berlaku, ia berakhir dalam barisan, bukan?
Sudah tentu, pangkalan data mungkin mengembalikan nilai.
Dan sistem fail, operasi sistem mungkin mengembalikan nilai
pada kira-kira masa yang sama tetapi ada mungkin akan
ada beberapa pesanan kepada mereka.
Dan node.js akan mempunyai dasarnya beratur
seperti pelbagai besar atau vektor, beberapa struktur data
penampan semua perkara-perkara.
Kerana ia boleh benar-benar hanya mengendalikan salah seorang daripada mereka pada satu masa.
Jadi, apabila anda, pemaju,
menulis tak segerak JavaScript kod menggunakan asynchronous
fungsi, anda membenarkan ini yang dikenali sebagai gelung acara untuk pergi
untuk semak seterusnya, bukan?
Jadi, selagi anda dengan serta-merta kembali kerana semua
kaedah ini tak segerak lakukan seperti fail dibaca dan stat,
mereka kembali dengan serta-merta kerana panggilan balik akhirnya
mendapat kembali.
Sebaik sahaja anda kembali,
ini bermakna orang lain boleh mendapatkan muncul off saham di sini
atau bahawa ia boleh muncul di luar di hadapan baris gilir di sini.
Dan sebagainya, terdapat dalam Malah serialization yang
semua yang berlaku,
walaupun semua barangan ini boleh berlaku secara selari
pada sistem multithreaded.
Tetapi node.js sendiri dan pelayan sedang berlari
sebagai salah satu thread.
Dan sebelah bawah itu adalah t anda tidak semestinya max
keluar komputer anda keupayaan adalah seperti terutamanya
jika anda mempunyai teras atau 16 walaupun komputer 2 teras
dan anda hanya berjalan satu contoh nod.
Tetapi jika anda telah sekali lagi diambil sesuatu seperti 161,
anda mengelakkan mimpi ngeri yang besar sakit kepala ketika datang
berlumba syarat dan kunci dan tiang sinyal
dan menulis benar-benar kod multithreaded,
jadi upsides dan kelemahan.
OK. Jadi, kembali kepada kod di sini, biarlah saya mencadangkan supaya kita mula
untuk memudahkan perkara sedikit.
Kami melihat satu pelayan sedikit lalu yang kelihatan seperti ini.
Jadi, itu boleh dikatakan agak mudah.
Tetapi seperti di dunia PHP, terdapat rangka kerja
seperti Laravel dan ada perkara seperti Rails dan Django,
Perkara yang sama di dunia node.js.
Dan kami akan menghabiskan lebih banyak masa pada ini pada hari Rabu
dan dalam projek akan datang.
Tetapi jika saya pergi ke dalam server 2 direktori,
dapati dua paradigma di sini.
Jadi ini adalah - ada akan untuk menjadi contoh bersamaan
tetapi ia menggunakan rangka kerja dipanggil express.js,
yang merupakan sumber terbuka percuma perisian seperti Rails dan Django,
seperti Laravel, itu hanya akhirnya akan
menjadi tidak dihargai hari ini 'Sebab kita telah menulis
contoh mudah seperti.
Tetapi percaya kepada kami.
Ini akan dengan cepat menjadi rakan anda
kerana ia akan menjimatkan anda banyak kod TDS.
Dan paradigma biasa bagi permohonan express.js adalah
mempunyai app.js atau server.js Fail yang mengandungi logik
program anda atau di kurangnya pintu masuk.
Anda boleh mempunyai beberapa fail.
Satu nod modul Subdirektori yang mempunyai perpustakaan
yang anda muat turun seperti Async
dan menyatakan dirinya pada orang lain.
Dan kemudian package.json, package.json kelihatan seperti ini,
dan anda boleh membuat secara manual atau alat mencipta untuk anda
dan ia betul-betul fail json
dan bahagian yang menarik adalah kebergantungan sini.
Sama seperti dalam Laravel, anda mempunyai direktori vendor
dan anda terpaksa bimbang mengenai pakej dan melakukan -
sebenarnya mengemas kini dengan Tukang atau perintah yang sama,
perpustakaan anda telah dipasang,
begitu juga dengan package.json sini dan anda menguruskan perpustakaan
dan versi bahawa anda mengambil berat tentang.
Jadi, jika saya mempunyai package.json yang, Saya hanya boleh melakukan NPM,
Nod Pakej Manger memasang, ia akan kelihatan secara automatik
di fail package.json.
Lihat dan lihat, saya mempunyai versi terbaru
semua modul vendor
dalam nod menekankan modul direktori sini atau mungkin
dalam sesetengah ibu bapa atau direktori leluhur.
Dan jika tidak, ia akan dimuat turun
dan anda akan melihat sejumlah
barangan HTTP akan merentasi dawai.
Jadi misalnya, biarlah saya menunjukkan kandungan
modul nod hanya untuk meluahkan.
Biar saya pergi ke hadapan dan berani memadam modul nod
supaya semua saya ada sekarang adalah ini.
Dan jika saya NPM memasang, anda akan melihat bahawa ia akan membaca
bahawa fail package.json dan kita telah melihat output yang sama
ini di dunia Laravel itu.
Ia memuat turun keseluruhan sekumpulan barangan dan itulah
kerana ekspres seterusnya bergantung kepada sejumlah
perpustakaan orang lain.
Jadi, semua orang-orang adalah jenis dimuat turun secara rekursif.
Sehingga kini, jika saya lakukan dalam LS lagi,
ada modul nod saya direktori kembali
dan menyatakan sebagai kembali.
Jadi ia hanya satu cara memudahkan pengurusan pakej.
Sekarang, jika kita melihat file app.js, ini akan
menjadi perkembalian kepada pelayan web kami yang paling awal
di mana kita hanya meludah keluar "hello, dunia".
Tetapi notis paradigma di sini,
pertama kita memerlukan nyata modul, maka kita mempunyai garis ini
kod yang anda tahu daripada dokumentasi.
Anda benar-benar merawat yang ubah modul sebagai fungsi,
jadi terbuka kurungan rapat kurungan bermakna melaksanakannya.
Itu akan nampaknya kembali sesuatu yang kita akan
biasanya memanggil app.
Bagaimana ia berfungsi?
Saya tidak benar-benar tahu.
Saya akan memberitahu orang lain, anda tahu, di dunia nyata menulis bahawa.
Saya akan kini berdiri di atas beliau bahu supaya
untuk membuat permohonan saya berjalan sedikit lebih mudah.
Di sini, saya akan mendengar pada port yang tertentu
yang boleh menjadi yang paling apa-apa.
Dan di sini adalah kod itu mungkin lebih mengingatkan kini
daripada Laravel dan routes.php.
Jadi ini adalah makan malam yang mudah, saya hanya akan menentukan laluan yang
untuk slash bintang, jadi semua akan diserap
oleh permintaan pengendali ini.
Paradigma untuk permintaan pengendali adalah fungsi tanpa nama
dengan hujah permintaan
dan objek tindak balas seperti sebelum ini.
Dan res.send dalam cara nyata anda menghantar kod diikuti
oleh apa sahaja yang anda hendak hantar.
Dan sudah tentu, anda boleh melakukan sesuatu pelamun
dengan sebenarnya menghantar fail atau HTML
atau dinamik kandungan.
Tetapi untuk sekarang, semua yang kita lakukan telah meludah keluar hello, dunia.
Jika kita pergi ke pelayan tiga, ini adalah lebih pelamun hanya
untuk menunjukkan kepada anda beberapa fungsi.
Dan kami akan menunjukkan kepada anda versi yang seksi
ini pada hari Rabu.
Tetapi jika anda pernah mendengar daripada Socket IO mungkin,
supaya saya berfikir Jonathan atau seseorang berkata sebelum ini,
salah satu perkara yang nod adalah benar-benar diketahui
adalah masa sebenar tingkah laku, bukan?
Fikirkan tentang PHP MySQL, jika anda adalah untuk melaksanakan pelayan chat
dalam PHP di mana dua orang boleh membuka tetingkap pelayar untuk foo.com
dan kemudian mula berkirim IM setiap lain, Alice dalam satu tingkap,
Bob dalam satu lagi supaya setiap daripada mereka melihat beliau
atau mesejnya di dalam tetingkap lain.
Bagaimana anda akan melakukan ini dalam PHP dan MySQL?
Menggunakan atau tidak menggunakan jenis Laravel daripada tidak penting, anda boleh mempunyai
seperti fail index.php.
Dan anda mendapat untuk mempunyai - dalam beberapa kes ia mendapat meludah
daripada bentuk, jadi tidak akan menjadi satu bentuk HTML
yang mungkin tidak mengemukakan melalui penghantaran borang biasa
tetapi Ajax mungkin, bukan?
Jadi, ke atas mengemukakan pengendali, jadi anda taip ke dalam medan teks,
anda tekan enter dan kemudian ia mendapat dihantar kepada pelayan melalui Ajax.
Apa yang anda kemudian lakukan pada pelayan?
Jadi, anda mempunyai index.php
atau sesuatu dot PHP itulah diterima dalam parameter HTTP
dari pengguna, itu Alice atau Bob mesej segera, apa yang anda lakukan
dengannya untuk menyebarkannya Bob atau Alice, masing-masing?
Maksud saya anda benar-benar mempunyai alat dengan yang
untuk melakukan ini dalam min anda.
Jadi seperti apa yang anda akan lakukan?
Anda mempunyai satu minit untuk melaksanakan program ini.
Yeah?
[Didengar Catatan]
Perfect. Betul, jadi anda mempunyai database.
Kita tahu sedikit sedikit tentang MySQL.
Jadi, anda mempunyai meja itulah mesej,
mungkin ada masa-masa setem, ID pengguna,
kandungan mesej yang sendiri diwujudkan yang,
dikemaskini itu dan semua itu.
Jadi, anda menyimpan di dalam sistem database.
Dan andaikan Alice menghantarkan mesej pertama, bagaimanakah Bob mendapatkan
mesej yang kini dari pangkalan data?
>> Ia mungkin beberapa Ajax tindak balas yang yang sentiasa berlaku
kembali ke pangkalan data atas mendapatkan [didengar].
>> Tepat sekali.
Jadi kod Bob siapa yang diaktifkan yang sama seperti Alice adalah hanya jenis
hubungan simetri,
Pelayar Bob mempunyai beberapa kod Ajax yang mungkin mungkin setiap 30
saat yang menarik pelayan melalui sync Ajax,
ada mesej baru?
Adakah terdapat mesej baru?
Setiap 30 saat akan menjadi jenis suboptimal
kerana beliau perlu menunggu lebih
jika Alice beribu- hanya menghantar mesej.
Jadi, pelayar Bob boleh setiap saat memukul pelayan.
Tetapi itu bermakna ini Alice pelayar memukul pelayan
setiap saat.
Bagaimana pula Charlie [Ejaan diandaikan]
dan David [diandaikan ejaan] dan Edward [diandaikan ejaan]
dan tiap-tiap surat lain abjad?
Apakah masalah pendekatan ini?
Banyak hits berlebihan -
Maksud saya anda hanya berkesan Dos penglihatan anda sendiri
atau DDOSing, Diedarkan Penafian Daripada serangan Perkhidmatan
di laman web anda sendiri, dengan mempunyai semua
daripada para pengguna menjalankan JavaScript kod yang hanya ping yang
palang pintu daripada pelayan anda walaupun nombor sewenang-wenangnya,
80 peratus daripada masa yang tiada siapa yang berkata apa-apa
di dalam bilik sembang.
Tetapi anda hanya menyemak memastikan apa-apa.
Jadi PHP dalam banyak bahasa hanya tidak baik
untuk komunikasi masa nyata.
Kerana dalam PHP ingat ada memori pusat, bukan?
Anda mempunyai objek sesi yang mewujudkan ilusi
penyimpanan pusat tetapi itulah secara setiap pengguna.
Anda tidak mempunyai memori global seperti yang anda lakukan dalam Java Servlet
dalam biasa atau dalam lain rangka kerja-kerja seperti itu.
Node.js walaupun, anda mempunyai memori global 'menyebabkan anda mempunyai
satu pelayan dan itu boleh ingat apa-apa ia mahu
kira-kira semua pengguna.
Dan anda mungkin masih mempunyai pangkalan data yang.
Tetapi perkara yang baik tentang node.js juga adalah bahawa ia adalah lebih baik
daripada sesuatu seperti PHP dan mewujudkan ilusi
mengendalikan pelbagai perkara sekaligus.
Dan sebenarnya seperti dalam diketepikan, anda boleh melaksanakan pelayan bual dalam PHP,
tetapi anda biasanya akan melakukan sesuatu yang dinamakan mengundi panjang
Teknik ini tidak ping pelayan setiap saat.
Anda ping pelayan, yang Pelayan tidak bertindak balas kepada anda
untuk ke atas sebanyak 30 saat, ia benar-benar duduk
dalam gelung menunggu dan menunggu.
Dan cek pelayan jika ada data baru dalam pangkalan data
dan hanya sekali ia melihat anda, "Oh, inilah mesej dari Bob, "
ia membalas server HTP ini?
Jadi kesan dalam pelayar anda ialah ikon IE atau Mozilla
atau apa sahaja hanya menyimpan berputar selama 30 saat pada satu masa.
Tetapi terbalik adalah, anda tidak perlu mempunyai 30 permintaan sambungan
dalam 30 saat, anda mempunyai satu.
Jadi ia dipanggil mengundi panjang.
Tetapi lebih baik di web moden pelayar adalah sesuatu yang dinamakan
WebSocket, yang anda mengambil CS143,
anda berkesan boleh membuat Sambungan TCP dari pelanggan
seperti pelayar ke pelayan dan kemudian tergantung kepada ia
tanpa menggunakan hampir sebagai banyak sumber
sebagai HTTP tradisional mungkin lakukan.
Dan Socket Bahagian Antarabangsa bertindak sebagai perpustakaan node.js
yang menjadikan ia lebih mudah untuk membuat sambungan soket
atau ilusi terdapat di untuk pelayar lama
supaya anda boleh melaksanakan ini fungsi masa nyata ini.
Jadi, di sini adalah satu contoh.
Ini barangan sehingga atas mendapat sedikit lebih rumit
tetapi ia kebanyakannya copy dan paste dari dokumentasi socket.io 's.
Di sini kini menjadi lebih permintaan pengendali tepat.
Jika pengguna permintaan mengurangkan, apa fail saya akan
menjadi nampaknya menghidangkan kepada mereka?
Index.html.
Dan ada beberapa baru barangan di sini aliran
yang saya akan menunjukkan kepada anda dalam hanya seketika.
Tetapi ini hanya satu lagi cara
daripada meraih fail sedikit dengan lebih cekap
daripada hanya melakukan fs.readFile.
Ia lebih bijak sedikit terutamanya bagi fail-fail besar.
Cerita jadi panjang pendek, ayat-ayat ini hanya untuk berkhidmat
sehingga fail yang dipanggil index.html
yang sekarang menganggap mengandungi bentuk HTML di mana Alice
dan Bob mungkin bergaul.
Akhir sekali, io.sockets.on, jadi ini datang dari garis ini di sini.
Jadi, saya hanya membaca dokumentasi io.socket memberikan saya
akses kepada apa yang dipanggil WebSocket dengan pelayar,
antara pelayar dan pelayan.
Saya mendengar untuk khas sambungan kejadian yang cara
apabila pengguna pertama hits pelayan cuba
untuk membuka sambungan ini, saya akan memanggil panggilan ini kembali.
Dan sekarang, saya akan untuk melakukan yang berikut.
Setiap lima saat, apa yang saya akan lakukan?
Saya akan mengeluarkan atau menyiarkan jika anda masih ingat awal,
bahasa grafik akan bahawa blok siaran?
Jadi, anda akan mengeluarkan
atau mencetuskan satu peristiwa yang dipanggil sewenang-wenangnya dari pelayan.
Dan ia akan mengandungi Ping mesej
dan tarikh semasa.
Jadi, ini adalah yang sebenar pelayan chat yang Alice
dan Bob boleh digunakan, tetapi ia jenis daripada pelayan chat automatik
mana mesej adalah ping hanya jenis sonar.
Ia hanya tarikh pada masa-masa yang dihantar setiap lima saat.
Jadi, jika saya benar-benar menjalankan ini perkara - dan itu sahaja.
Untuk menjadi jelas turun di sini, notis ini hanya pembalakan di sini.
Jadi, saya akan beralih a mata untuk itu.
Biar saya buat nod app.js.
Biar saya pergi ke pelayar saya.
Reload halaman rumah di sini.
[Jeda]
Dan biarlah saya menutup pemeriksa.
Setiap lima saat, saya mempunyai demonstrasi walaupun tidak
interaktif untuk manusia
daripada sesuatu yang berlaku tak segerak.
Dalam notis pelayar, tidak ada icon berputar.
Ia menggunakan ciri pelamun Chrome dalam penyemak imbas moden
mengekalkan soket sambungan di bawah hood
dan ia apa yang dipanggil umumnya model pub / sub,
menerbitkan / melanggan model, di mana kita tidak melakukan
yang agak jelas di sini.
Tetapi apa yang baik tentang ini pub am / sub paradigma adalah
bahawa anda boleh mempunyai satu penerbit.
Dalam kes ini, pelayan pusat dan semua
individu pelayar pelanggan.
Alices dan Bobs daripada dunia boleh melanggan kepadanya,
supaya anda boleh menyampaikan mesej antara apa-apa bilangan pengguna.
Dan walaupun sekali lagi kami tidak melihat interaktif,
kami mempunyai mungkin 12 baris kod hanya untuk melakukan ini.
Dan ia mungkin tidak lonjakan untuk membayangkan bagaimana anda boleh cambuk
keluar fail index.html yang yang mempunyai bentuk HTML benar,
sedikit sedikit kod jQuery dengan Ajax yang tidak menghantar siang hari
tetapi hanya menghantar apa sahaja Alice atau Bob jenis ke pelayan
dan kemudian pelayan relay akan keluar.
Dan saya berjanji untuk melihat pada satu-satu perkara yang lepas hanya
mengusik anda dengan ini.
Jika kita pergi ke dalam aliran sifar dan satu,
anda akan melihat kod yang hanya sedikit berbeza di sini.
Hanya supaya anda telah melihat ia, ini adalah alternatif
apa yang saya dipanggil fs.readFile kaedah sebelum ini, di mana,
anda boleh memberitahu node.js, "Pergi membaca fail ini ke dalam ingatan.
Tetapi jika ia besar hanya memberi saya sebahagian pada satu masa. "
Dan anda mungkin tahu dari CS165
atau 161 sistem fail telah berbeza
hartanah prestasi.
Anda mungkin mahu membaca dalam blok 512 bytes
atau 2 kilobait atau apa sahaja.
Ini adalah cara yang mengoptimumkan saling fail iterative
supaya anda boleh meludah keluar sedikit dengan lebih cepat
kepada pelayar atau sesiapa pelanggan akhir adalah.
Jumlah begitu besar kandungan hari ini dan kita akan menyelam
ke dalam lebih terperinci pada hari Rabu dengan Tim [ejaan diandaikan]
khususnya melihat bagaimana kita boleh menterjemah beberapa idea-idea
dari separuh pertama kursus Laravel dan model
ke dalam perpustakaan yang dia sendiri menulis dipanggil Bookshelf.js
yang menjadi semakin popular dalam masyarakat
kerana ia memberi anda sebahagian besar,
jika tidak lebih daripada fungsi fasih
yang ingat ialah wawasan perpustakaan Laravel,
jadi lebih pada itu dan lebih bagaimana
untuk membangunkan beroperasi sepenuhnya aplikasi pada Rabu.
Kami akan anda lihat kemudian.