﻿1
00:00:01,260 --> 00:00:02,700
‫Instruktur: Selamat datang kembali.

2
00:00:02,700 --> 00:00:06,280
‫Jadi saya harap Anda menikmati bagian ini sejauh ini, dan

3
00:00:06,280 --> 00:00:09,800
‫menikmati bekerja dengan Node.js. js.

4
00:00:09,800 --> 00:00:13,100
‫Jadi sekarang mari kita lanjutkan dalam

5
00:00:13,100 --> 00:00:17,573
‫proyek kita dan membangun API web yang sangat sederhana.

6
00:00:19,430 --> 00:00:23,290
‫Sekarang, untuk memulai, apa sebenarnya API itu?

7
00:00:23,290 --> 00:00:25,759
‫Jawaban panjangnya, Anda akan

8
00:00:25,759 --> 00:00:30,450
‫belajar di salah satu bagian berikutnya, tetapi untuk saat ini, jawaban

9
00:00:30,450 --> 00:00:34,510
‫singkatnya, setidaknya dalam konteks API web ini, pada dasarnya,

10
00:00:34,510 --> 00:00:39,510
‫API adalah layanan tempat kami dapat meminta beberapa data, jadi dalam

11
00:00:39,750 --> 00:00:43,880
‫hal ini, data yang ingin diminta pengguna adalah data

12
00:00:43,880 --> 00:00:46,470
‫tentang produk yang kami tawarkan

13
00:00:46,470 --> 00:00:50,070
‫di peternakan simpul ini, jadi dalam proyek ini.

14
00:00:50,070 --> 00:00:54,360
‫Jadi saya memiliki folder dev-data ini, dan di sana, saya

15
00:00:54,360 --> 00:00:58,870
‫memiliki file JSON, dan JSON, jika Anda tidak tahu, adalah format

16
00:00:58,870 --> 00:01:01,500
‫teks yang sangat sederhana yang sangat

17
00:01:01,500 --> 00:01:04,250
‫mirip dengan objek JavaScript, jadi terlihat

18
00:01:04,250 --> 00:01:07,720
‫seperti ini , dan kita dapat memiliki array,

19
00:01:07,720 --> 00:01:11,010
‫yang sebenarnya kita miliki, jadi kita memiliki satu

20
00:01:11,010 --> 00:01:14,630
‫array besar, yang kemudian berisi lima objek ini, dan

21
00:01:14,630 --> 00:01:18,400
‫setiap objek kemudian memiliki ID, nama produk, gambar, dan

22
00:01:18,400 --> 00:01:20,160
‫seterusnya dan seterusnya.

23
00:01:20,160 --> 00:01:24,270
‫Sekarang masing-masing harus berupa string untuk masing-masing kunci, dan

24
00:01:24,270 --> 00:01:26,593
‫kemudian kita memiliki nilainya.

25
00:01:29,828 --> 00:01:34,010
‫Jadi pada dasarnya, data inilah yang akan dikirim API

26
00:01:34,010 --> 00:01:36,673
‫kami ke klien saat diminta.

27
00:01:37,840 --> 00:01:40,763
‫Jadi kita akan memiliki rute lain di sini.

28
00:01:43,250 --> 00:01:48,250
‫Jadi di sini, jika nama path sama dengan /api.

29
00:01:55,980 --> 00:01:59,580
‫Dan untuk saat ini, sebagai placeholder, kami hanya akan mengirimkan

30
00:02:04,070 --> 00:02:05,703
‫kembali API seperti ini.

31
00:02:08,520 --> 00:02:12,750
‫Jadi yang ingin kita lakukan sekarang adalah benar-benar membaca data

32
00:02:12,750 --> 00:02:17,500
‫dari file ini di sini, lalu mengurai JSON ke dalam JavaScript, dan

33
00:02:17,500 --> 00:02:20,520
‫kemudian mengirimkan kembali hasilnya ke klien.

34
00:02:20,520 --> 00:02:24,053
‫Jadi sesuatu yang sangat sederhana dan mari kita mulai bekerja.

35
00:02:26,430 --> 00:02:29,350
‫Jadi pendekatan pertama untuk melakukan ini

36
00:02:29,350 --> 00:02:33,400
‫adalah masuk ke rute ini dan kemudian membaca file

37
00:02:33,400 --> 00:02:36,350
‫di sini menggunakan fungsi membaca file, bukan?

38
00:02:36,350 --> 00:02:37,853
‫Jadi mari kita mulai dengan melakukan itu.

39
00:02:40,110 --> 00:02:44,393
‫Jadi fs. , dan itu sebenarnya

40
00:02:46,287 --> 00:02:50,110
‫readFile, bukan fileRead, jadi readFile, lalu nama filenya.

41
00:02:50,110 --> 00:02:52,593
‫Sekarang, ingat bagaimana saya memberi tahu

42
00:02:52,593 --> 00:02:56,260
‫Anda sebelumnya bahwa ini bukan satu-satunya cara untuk menemukan file

43
00:02:56,260 --> 00:02:58,223
‫kita di sistem file.

44
00:02:59,300 --> 00:03:01,460
‫Mari untuk saat ini benar-benar menggunakannya, tetapi

45
00:03:01,460 --> 00:03:03,510
‫setelah kita menulisnya di sini, saya

46
00:03:03,510 --> 00:03:04,910
‫akan menunjukkan cara lain.

47
00:03:05,790 --> 00:03:10,790
‫Jadi, perhatikan, titik ini sebenarnya merujuk ke direktori tempat

48
00:03:11,260 --> 00:03:14,633
‫kita menjalankan perintah node di terminal.

49
00:03:15,740 --> 00:03:18,420
‫Jadi, sekali lagi, titik ini

50
00:03:18,420 --> 00:03:21,414
‫di sini sekarang mewakili folder saat ini di

51
00:03:21,414 --> 00:03:25,800
‫sini karena di situlah kita sebenarnya menjalankan perintah node, jadi di

52
00:03:25,800 --> 00:03:28,600
‫folder 1-node-farm ini, yang merupakan direktori kerja

53
00:03:28,600 --> 00:03:32,270
‫kita saat ini dalam kasus ini, tapi kita bisa

54
00:03:32,270 --> 00:03:35,230
‫memilikinya jalankan perintah node di tempat lain,

55
00:03:35,230 --> 00:03:38,260
‫dan kemudian titik akan berarti sesuatu yang lain.

56
00:03:38,260 --> 00:03:42,860
‫Jadi, misalnya, kami dapat dengan sempurna menemukan, pergi ke desktop

57
00:03:42,860 --> 00:03:46,380
‫dan menjalankan node di sana, dan kemudian menentukan

58
00:03:46,380 --> 00:03:50,600
‫seluruh jalur ke index. js, tapi kita bisa melakukan

59
00:03:50,600 --> 00:03:55,080
‫itu, tapi kemudian dalam kasus ini, titik berarti desktop, jadi jika kita

60
00:03:55,080 --> 00:03:57,390
‫memulai skrip dari desktop, maka ini

61
00:03:57,390 --> 00:03:59,890
‫di sini, titik ini, berarti desktop, dan

62
00:03:59,890 --> 00:04:03,200
‫itu tidak selalu ideal , dan karena itu, ada

63
00:04:03,200 --> 00:04:05,290
‫cara yang lebih baik.

64
00:04:05,290 --> 00:04:08,230
‫Jadi semua Node. js, mereka

65
00:04:08,230 --> 00:04:12,790
‫mendapatkan akses ke variabel yang disebut dirname, dan

66
00:04:12,790 --> 00:04:17,200
‫variabel itu selalu diterjemahkan ke direktori tempat

67
00:04:17,200 --> 00:04:21,078
‫skrip yang sedang kami jalankan berada.

68
00:04:21,078 --> 00:04:24,170
‫Jadi dalam hal ini, sebenarnya tempat

69
00:04:24,170 --> 00:04:28,410
‫yang sama karena index. js juga ada di

70
00:04:28,410 --> 00:04:31,980
‫folder pertanian simpul ini, tetapi sekali lagi, untuk alasan

71
00:04:31,980 --> 00:04:34,280
‫yang saya sebutkan sebelumnya, sering kali

72
00:04:34,280 --> 00:04:38,670
‫merupakan praktik yang lebih baik untuk menggunakan variabel dirname, jadi mari

73
00:04:38,670 --> 00:04:41,343
‫kita lakukan itu, dan untuk itu,

74
00:04:44,400 --> 00:04:46,690
‫kita membuat string template, lalu

75
00:04:46,690 --> 00:04:51,567
‫kami menggunakan variabel, jadi __dirname, jadi yang merupakan singkatan dari nama direktori.

76
00:04:54,870 --> 00:04:57,870
‫Dan biasanya, kami melakukannya seperti ini.

77
00:04:57,870 --> 00:04:59,850
‫Sekarang ada pengecualian untuk

78
00:04:59,850 --> 00:05:01,963
‫aturan ini, yang merupakan fungsi require.

79
00:05:03,224 --> 00:05:05,140
‫Jadi ketika membutuhkan modul,

80
00:05:05,140 --> 00:05:08,160
‫kita sebenarnya bisa membutuhkan modul kita sendiri, dan

81
00:05:08,160 --> 00:05:10,650
‫kita akan melakukannya nanti, seperti di

82
00:05:10,650 --> 00:05:13,800
‫video berikutnya, atau salah satu dari dua video

83
00:05:13,800 --> 00:05:18,200
‫berikutnya, dan di sana, titik sebenarnya juga berarti pekerjaan saat ini

84
00:05:18,200 --> 00:05:20,863
‫direktori dan bukan tempat kami menjalankan skrip.

85
00:05:21,965 --> 00:05:25,270
‫Jadi perlu diingat bahwa fungsi require adalah

86
00:05:25,270 --> 00:05:27,780
‫pengecualian untuk aturan ini, tetapi

87
00:05:27,780 --> 00:05:30,050
‫biasanya, titik adalah tempat

88
00:05:30,050 --> 00:05:35,050
‫skrip dijalankan, dan __dirname adalah tempat file saat ini berada.

89
00:05:37,920 --> 00:05:42,920
‫Benar, sekarang mari kita tentukan pengkodean file utf-8, dan kemudian

90
00:05:43,840 --> 00:05:48,840
‫fungsi panggilan balik kami, yang merupakan kesalahan pertama, ingat,

91
00:05:49,900 --> 00:05:54,900
‫dan jadi kami sekarang memiliki akses ke data ini.

92
00:05:56,700 --> 00:05:59,920
‫Sekarang data dalam JSON, dan dalam JavaScript, kami memiliki sesuatu

93
00:05:59,920 --> 00:06:04,023
‫yang dibangun yang disebut JSON. mengurai.

94
00:06:06,290 --> 00:06:08,600
‫Jadi ini akan mengambil kode

95
00:06:08,600 --> 00:06:10,190
‫JSON, yang sebenarnya

96
00:06:10,190 --> 00:06:14,400
‫adalah string, dan kemudian akan secara otomatis mengubahnya menjadi JavaScript,

97
00:06:14,400 --> 00:06:17,593
‫jadi objek atau larik JavaScript dalam kasus ini.

98
00:06:19,240 --> 00:06:21,117
‫Sebut saja ini

99
00:06:23,857 --> 00:06:26,743
‫productData, dan kemudian juga dengan cepat melihatnya.

100
00:06:32,500 --> 00:06:34,853
‫Jadi di konsol dalam hal ini.

101
00:06:36,520 --> 00:06:40,740
‫Jadi, restart server, dan sekarang, jangan lupa untuk

102
00:06:40,740 --> 00:06:45,740
‫menekan rute /api, dan oh, apa yang terjadi di sini?

103
00:06:47,520 --> 00:06:49,470
‫Oh, kami benar-benar me-restart server.

104
00:06:52,545 --> 00:06:54,397
‫Jadi sekarang kita mendapatkan

105
00:06:55,330 --> 00:06:58,020
‫API respons, dan sekarang mari kita

106
00:06:58,020 --> 00:07:01,140
‫lihat di sini, sebenarnya, di objek data produk.

107
00:07:01,140 --> 00:07:04,340
‫Jadi ini hanya objek yang bagus, dengan semua data

108
00:07:04,340 --> 00:07:09,340
‫yang kami miliki di data ini. berkas json.

109
00:07:09,620 --> 00:07:13,450
‫Baiklah, sekarang langkah selanjutnya adalah mengirim

110
00:07:13,450 --> 00:07:16,653
‫kembali data ini sebagai tanggapan.

111
00:07:17,640 --> 00:07:20,180
‫Sekarang tanggapan ini. metode akhir

112
00:07:20,180 --> 00:07:24,953
‫di sini sebenarnya perlu mengirim kembali string dan bukan objek di sini.

113
00:07:25,890 --> 00:07:28,510
‫Dan sebenarnya yang ingin kita kirim kembali

114
00:07:28,510 --> 00:07:33,230
‫adalah datanya secara langsung, jadi data adalah string yang kemudian kita ubah

115
00:07:33,230 --> 00:07:37,410
‫menjadi objek menggunakan JSON. parse, tetapi untuk saat

116
00:07:37,410 --> 00:07:41,730
‫ini, kita sebenarnya tidak perlu melakukan itu, tetapi saya tetap

117
00:07:41,730 --> 00:07:44,445
‫melakukannya karena kita akan membutuhkan ini

118
00:07:44,445 --> 00:07:48,130
‫nanti ketika kita mulai membangun template HTML kita.

119
00:07:48,130 --> 00:07:50,710
‫Jadi saat itulah kita akan membutuhkan

120
00:07:50,710 --> 00:07:52,890
‫data ini dalam format JavaScript.

121
00:07:52,890 --> 00:07:56,280
‫Untuk saat ini, kami hanya ingin mengirim kembali string sebenarnya

122
00:07:56,280 --> 00:07:57,453
‫yang kami terima.

123
00:07:59,146 --> 00:08:02,380
‫Sekarang sebelum kita bisa melakukannya, kita sebenarnya perlu

124
00:08:02,380 --> 00:08:04,220
‫menentukan sehingga kita

125
00:08:04,220 --> 00:08:09,220
‫perlu memberi tahu browser bahwa kita mengirim kembali JSON, jadi seperti sebelumnya,

126
00:08:10,110 --> 00:08:14,160
‫di mana kita menyetel Content-type ke text/html, kita sekarang perlu

127
00:08:14,160 --> 00:08:17,703
‫memberi tahu a browser yang kami kirimkan JSON.

128
00:08:19,060 --> 00:08:24,060
‫Jadi kita katakan res. writeHead seperti sebelumnya, dan

129
00:08:24,160 --> 00:08:27,260
‫sekarang kita menggunakan kode status

130
00:08:27,260 --> 00:08:31,830
‫200, yang berarti oke, dan kemudian objek header.

131
00:08:31,830 --> 00:08:35,330
‫Dalam hal ini, itu hanya akan menjadi

132
00:08:40,320 --> 00:08:45,320
‫satu, jadi Content-type, dan ketika kita mengirim JSON, kita perlu mengatakan application/json.

133
00:08:49,570 --> 00:08:53,240
‫Jadi untuk HTML, itu teks/html, untuk

134
00:08:53,240 --> 00:08:56,323
‫JSON, itu aplikasi/json, dan

135
00:08:58,330 --> 00:09:01,933
‫sekarang mari kita lihat itu.

136
00:09:05,200 --> 00:09:08,183
‫Muat ulang server di sini sangat cepat,

137
00:09:12,600 --> 00:09:17,600
‫dan memang, di sini kami memiliki API yang mengirimkan kembali semua data

138
00:09:17,690 --> 00:09:20,053
‫tentang lima produk kami.

139
00:09:20,950 --> 00:09:25,800
‫Luar biasa, bagus, dan bagus, tetapi sebenarnya tidak

140
00:09:25,800 --> 00:09:27,970
‫sempurna, karena tidak

141
00:09:27,970 --> 00:09:31,463
‫benar-benar 100% efisien, dan itu karena

142
00:09:32,546 --> 00:09:36,780
‫setiap kali seseorang mencapai rute /api ini,

143
00:09:36,780 --> 00:09:40,640
‫file harus dibaca dan kemudian dikirim

144
00:09:40,640 --> 00:09:42,640
‫kembali .

145
00:09:42,640 --> 00:09:45,720
‫Sebaliknya, yang dapat kita lakukan adalah membaca file

146
00:09:45,720 --> 00:09:49,110
‫sekali di awal, dan kemudian setiap kali seseorang

147
00:09:49,110 --> 00:09:51,600
‫mencapai rute ini, cukup mengirim

148
00:09:51,600 --> 00:09:55,273
‫kembali data tanpa harus membacanya setiap kali pengguna meminta.

149
00:09:56,410 --> 00:09:58,180
‫Apakah itu masuk akal?

150
00:09:58,180 --> 00:10:01,423
‫Nah, yang akan saya lakukan adalah meletakkan ini di sini.

151
00:10:03,550 --> 00:10:07,680
‫Oke, dan tentu saja, saya tidak membutuhkan semua ini, jadi

152
00:10:07,680 --> 00:10:10,530
‫ini tidak ada di sini, dan ini

153
00:10:10,530 --> 00:10:12,720
‫tidak ada di sini,

154
00:10:12,720 --> 00:10:15,630
‫dan sebenarnya, ini akan menjadi agak berbeda,

155
00:10:15,630 --> 00:10:19,570
‫dan itu karena kita sekarang akan benar-benar menggunakan versi sinkron,

156
00:10:19,570 --> 00:10:22,280
‫dan saya tahu apa yang Anda pikirkan,

157
00:10:22,280 --> 00:10:25,440
‫yaitu bahwa versi sinkron memblokir eksekusi kode, bukan?

158
00:10:25,440 --> 00:10:27,570
‫Dan meskipun itu benar, dalam

159
00:10:27,570 --> 00:10:29,580
‫hal ini, itu tidak

160
00:10:29,580 --> 00:10:32,040
‫menjadi masalah sama sekali, dan itu

161
00:10:32,040 --> 00:10:36,240
‫karena kode tingkat atas sebenarnya hanya dieksekusi sekali di awal.

162
00:10:36,240 --> 00:10:39,260
‫Hanya fungsi panggilan balik ini, misalnya, di

163
00:10:39,260 --> 00:10:43,440
‫sini, yang createServer, jadi fungsi ini di sini, inilah

164
00:10:43,440 --> 00:10:46,160
‫yang dijalankan setiap kali ada

165
00:10:46,160 --> 00:10:50,260
‫permintaan baru, tetapi bukan kode yang ada di sini.

166
00:10:50,260 --> 00:10:53,210
‫Kode yang berada di luar fungsi panggilan

167
00:10:53,210 --> 00:10:57,500
‫balik, jadi yang disebut kode tingkat atas, hanya pernah dieksekusi

168
00:10:57,500 --> 00:11:01,500
‫setelah kita memulai program, dan dalam situasi itu, tidak

169
00:11:01,500 --> 00:11:04,660
‫masalah sama sekali jika itu memblokir eksekusi,

170
00:11:04,660 --> 00:11:07,350
‫karena sekali lagi, itu hanya

171
00:11:07,350 --> 00:11:11,160
‫terjadi sekali dan hanya ketika kode benar-benar dimulai, bukan?

172
00:11:11,160 --> 00:11:12,820
‫Masuk akal?

173
00:11:12,820 --> 00:11:16,060
‫Jadi kita akan menggunakan versi sinkronisasi sekarang karena

174
00:11:16,060 --> 00:11:19,100
‫sebenarnya lebih mudah untuk menangani data itu,

175
00:11:19,100 --> 00:11:23,060
‫karena itu hanya menempatkan data ke dalam variabel yang tidak

176
00:11:23,060 --> 00:11:25,253
‫dapat kita gunakan segera.

177
00:11:27,930 --> 00:11:32,180
‫Jadi jangan khawatir tentang fakta bahwa fungsi ini memblokir karena, sekali

178
00:11:32,180 --> 00:11:34,800
‫lagi, ini ada di kode tingkat

179
00:11:34,800 --> 00:11:37,200
‫atas dan hanya dijalankan sekali.

180
00:11:37,200 --> 00:11:39,410
‫Rahasianya di sini hanyalah

181
00:11:39,410 --> 00:11:42,530
‫mengetahui kode mana yang hanya dieksekusi sekali dan

182
00:11:42,530 --> 00:11:45,890
‫hanya di awal, dan kode mana yang dieksekusi

183
00:11:45,890 --> 00:11:49,663
‫berulang-ulang, dan karena itu bermasalah saat memblokir loop acara.

184
00:11:50,560 --> 00:11:52,240
‫Dan tentu saja, selama

185
00:11:52,240 --> 00:11:55,990
‫sisa kursus besar dan besar ini, Anda akan mempelajarinya.

186
00:11:55,990 --> 00:11:58,650
‫Jadi Anda akan mempelajari segala sesuatu tentang loop acara,

187
00:11:58,650 --> 00:12:01,990
‫dan kode mana yang memblokir dan mana yang tidak, dan mengapa,

188
00:12:01,990 --> 00:12:04,760
‫jadi ini pertama kalinya saya menyebutkannya, tapi ini tidak

189
00:12:04,760 --> 00:12:06,560
‫akan menjadi yang terakhir kalinya.

190
00:12:07,620 --> 00:12:11,173
‫Anda akan mendengar saya mengatakan hal yang sama berulang-ulang.

191
00:12:14,180 --> 00:12:18,550
‫Jadi, panggil saja satu data ini, dan tentu saja, kita

192
00:12:18,550 --> 00:12:20,423
‫tidak memerlukan semua ini.

193
00:12:21,550 --> 00:12:24,253
‫Mari kita pindahkan ini ke sini, dan hanya itu.

194
00:12:29,040 --> 00:12:32,120
‫Jadi sebelum terjadi apa-apa, ia akan membaca data

195
00:12:32,120 --> 00:12:34,340
‫dari file JSON menjadi data.

196
00:12:34,340 --> 00:12:38,740
‫Kemudian juga akan menguraikannya menjadi objek.

197
00:12:38,740 --> 00:12:43,043
‫Sebut saja dataObject di sini, jadi apa yang akan kita

198
00:12:44,370 --> 00:12:48,060
‫lakukan di sini adalah tidak membaca file ini

199
00:12:48,060 --> 00:12:51,030
‫setiap kali ada permintaan, dan sebaliknya,

200
00:12:51,030 --> 00:12:55,960
‫cukup mengirim kembali data yang kita miliki sekarang di kode tingkat

201
00:12:55,960 --> 00:12:57,283
‫atas kita.

202
00:13:04,010 --> 00:13:08,450
‫Jadi data di sini sekarang berasal dari sini karena, tentu saja,

203
00:13:08,450 --> 00:13:11,060
‫kode dalam fungsi panggilan balik

204
00:13:11,060 --> 00:13:15,543
‫ini memiliki akses ke kode tingkat atas karena rantai lingkup, bukan?

205
00:13:17,510 --> 00:13:21,000
‫Membatalkan, menjalankan lagi, dan hanya untuk membuktikan kepada Anda

206
00:13:21,000 --> 00:13:23,803
‫bahwa itu masih berfungsi, dan berhasil.

207
00:13:25,070 --> 00:13:28,560
‫Sangat sempurna, dan itu lebih baik, itu lebih efisien, oh, dan

208
00:13:28,560 --> 00:13:30,023
‫mengapa saya menutup ini?

209
00:13:31,470 --> 00:13:34,863
‫Baiklah, mari kita buka lagi dengan sangat cepat.

210
00:13:37,890 --> 00:13:38,793
‫Jadi di sini kita pergi.

211
00:13:41,430 --> 00:13:45,890
‫Jadi itulah API kami yang sangat sederhana, yang pada dasarnya

212
00:13:45,890 --> 00:13:49,430
‫memungkinkan pengguna untuk meminta semua data tentang aplikasi

213
00:13:49,430 --> 00:13:52,353
‫kami dengan satu panggilan API.

214
00:13:53,810 --> 00:13:56,740
‫Jadi kami menambahkan rute lain di

215
00:13:56,740 --> 00:13:59,340
‫sini, /api, lalu kami membaca file

216
00:13:59,340 --> 00:14:02,930
‫secara serempak, memasukkannya ke objek ini, dan kemudian

217
00:14:02,930 --> 00:14:06,010
‫mengirim kembali objek itu sebagai respons, tetapi

218
00:14:06,010 --> 00:14:11,010
‫sebelum itu, menetapkan bahwa kami mengirim kembali application/json, jadi bahwa browser

219
00:14:11,353 --> 00:14:15,200
‫tahu persis apa yang diharapkan, dan dalam beberapa video

220
00:14:15,200 --> 00:14:16,720
‫berikutnya, kita

221
00:14:16,720 --> 00:14:19,730
‫akan benar-benar mulai membangun antarmuka pengguna, jadi

222
00:14:19,730 --> 00:14:22,673
‫itu bagian yang paling menarik, bukan?

