﻿1
00:00:01,070 --> 00:00:01,950
‫Instruktur: Baiklah!

2
00:00:01,950 --> 00:00:04,040
‫Dan sekarang untuk menyelesaikan bagian

3
00:00:04,040 --> 00:00:07,043
‫ini, mari pelajari cara menangkap pengecualian yang tidak tertangkap.

4
00:00:08,660 --> 00:00:11,930
‫Tapi apa sebenarnya pengecualian yang tidak tertangkap?

5
00:00:11,930 --> 00:00:15,290
‫Nah, semua kesalahan, atau sebut saja bug, yang terjadi

6
00:00:15,290 --> 00:00:17,280
‫pada kode sinkron kita

7
00:00:17,280 --> 00:00:21,230
‫tetapi tidak ditangani di mana pun disebut pengecualian yang tidak tertangkap.

8
00:00:21,230 --> 00:00:25,340
‫Dan seperti sebelumnya, sama seperti penolakan yang tidak tertangani, kami juga

9
00:00:25,340 --> 00:00:28,730
‫memiliki cara untuk menangani pengecualian yang tidak tertangkap.

10
00:00:28,730 --> 00:00:30,720
‫Jadi izinkan saya dengan cepat menunjukkan

11
00:00:30,720 --> 00:00:32,823
‫kepada Anda contoh pengecualian yang tidak tertangkap.

12
00:00:34,370 --> 00:00:37,400
‫Jadi mari kita berpura-pura bahwa kita sedang

13
00:00:37,400 --> 00:00:40,423
‫mencoba menghibur. mencatat sesuatu yang tidak ada.

14
00:00:42,110 --> 00:00:46,600
‫Dan segera, kami mendapatkan kesalahan ini di sini, x tidak ditentukan, dan

15
00:00:46,600 --> 00:00:50,080
‫kemudian secara default, kami mendapatkan seluruh jejak tumpukan ini di

16
00:00:50,080 --> 00:00:51,960
‫sini dicetak ke konsol.

17
00:00:51,960 --> 00:00:52,793
‫Baiklah.

18
00:00:52,793 --> 00:00:57,660
‫Dan sekarang, untuk memperbaikinya, ini sangat mirip dengan melakukan penolakan

19
00:00:57,660 --> 00:00:59,380
‫yang tidak tertangani.

20
00:00:59,380 --> 00:01:02,040
‫Jadi sekali lagi, kami mendengarkan sebuah acara,

21
00:01:02,040 --> 00:01:04,040
‫kali ini disebut uncaughtException.

22
00:01:08,662 --> 00:01:11,912
‫Dan tentu saja harus dalam tanda kutip.

23
00:01:12,840 --> 00:01:17,390
‫Dan kemudian seperti sebelumnya, kami meneruskan fungsi panggilan balik kami.

24
00:01:17,390 --> 00:01:18,223
‫Oke.

25
00:01:18,223 --> 00:01:20,960
‫Dan sekarang sebenarnya apa yang kami lakukan di sini sangat mirip dengan

26
00:01:20,960 --> 00:01:22,350
‫apa yang kami lakukan di sini.

27
00:01:22,350 --> 00:01:24,970
‫Jadi kami ingin mengunci kesalahan

28
00:01:24,970 --> 00:01:29,690
‫ke konsol sehingga kemudian muncul di log di server kami, oke?

29
00:01:29,690 --> 00:01:32,430
‫Jadi, beri kami cara untuk kemudian memperbaiki masalah.

30
00:01:32,430 --> 00:01:35,223
‫Dan kemudian kami ingin mematikan server dengan anggun.

31
00:01:36,750 --> 00:01:39,010
‫Jadi mari, nah sebenarnya di

32
00:01:39,010 --> 00:01:41,590
‫sini saya ingin mencetak seluruh kesalahan ke

33
00:01:41,590 --> 00:01:43,940
‫konsol, dan bukan hanya pesannya, oke?

34
00:01:43,940 --> 00:01:45,993
‫Dan mari kita juga mengubah urutannya di

35
00:01:47,300 --> 00:01:48,660
‫sini, tetapi hanya itu.

36
00:01:48,660 --> 00:01:50,140
‫Jadi sisanya sama.

37
00:01:50,140 --> 00:01:51,290
‫Dan

38
00:01:53,310 --> 00:01:58,310
‫ini tentu saja PENGECUALIAN TANPA PERCAYA!

39
00:01:58,320 --> 00:02:01,810
‫Sekarang saya bisa refactor ini di sini menjadi fungsi

40
00:02:01,810 --> 00:02:05,020
‫yang bagus, tapi biarkan saja seperti ini, oke?

41
00:02:05,020 --> 00:02:07,123
‫Oke, jadi sekarang mari kita jalankan kembali ini.

42
00:02:08,330 --> 00:02:11,090
‫Jadi mari kita lihat apa yang kita miliki di sini.

43
00:02:11,090 --> 00:02:13,700
‫Dan memang, kita sekarang melihat PENGECUALIAN TANPA PERCAYA!

44
00:02:13,700 --> 00:02:14,780
‫Mematikan.

45
00:02:14,780 --> 00:02:15,750
‫Baiklah?

46
00:02:15,750 --> 00:02:18,770
‫Dan sebenarnya ini kembali mencetak seluruh tumpukan ke

47
00:02:18,770 --> 00:02:21,400
‫konsol, tetapi saya tidak benar-benar menginginkannya.

48
00:02:21,400 --> 00:02:22,660
‫Saya tidak suka itu.

49
00:02:22,660 --> 00:02:25,860
‫Jadi mari kita kembali ke apa yang kita miliki di sini.

50
00:02:25,860 --> 00:02:28,683
‫Jadi salah. nama dan kemudian err. pesan.

51
00:02:30,890 --> 00:02:32,610
‫Oke, jadi sekarang

52
00:02:32,610 --> 00:02:36,290
‫kita memiliki ReferenceError bahwa x tidak didefinisikan, oke?

53
00:02:36,290 --> 00:02:38,520
‫Dan mari kita menempatkan hal yang sama di sini.

54
00:02:38,520 --> 00:02:39,983
‫Jadi seperti dulu.

55
00:02:40,950 --> 00:02:41,783
‫Baiklah.

56
00:02:41,783 --> 00:02:43,070
‫Dan itu sebenarnya semua

57
00:02:43,070 --> 00:02:45,370
‫yang ada untuk menangkap pengecualian yang tidak tertangkap.

58
00:02:45,370 --> 00:02:48,180
‫Sekarang sementara di sini dalam penolakan yang tidak

59
00:02:48,180 --> 00:02:51,230
‫tertangani, menerjang aplikasi seperti yang kami lakukan di

60
00:02:51,230 --> 00:02:53,630
‫sini adalah opsional, ketika ada pengecualian

61
00:02:53,630 --> 00:02:57,150
‫yang tidak tertangkap, kami benar-benar perlu untuk membuat crash aplikasi

62
00:02:57,150 --> 00:02:59,970
‫kami karena setelah ada pengecualian yang tidak tertangkap,

63
00:02:59,970 --> 00:03:01,610
‫seluruh proses node

64
00:03:01,610 --> 00:03:04,370
‫dalam keadaan - Disebut negara najis, oke?

65
00:03:04,370 --> 00:03:07,770
‫Jadi untuk memperbaikinya, proses harus dihentikan dan

66
00:03:07,770 --> 00:03:09,940
‫kemudian dimulai ulang, oke?

67
00:03:09,940 --> 00:03:11,330
‫Dan lagi,

68
00:03:11,330 --> 00:03:13,460
‫dalam produksi, kita harus memiliki

69
00:03:13,460 --> 00:03:16,640
‫alat yang akan memulai ulang aplikasi setelah mogok.

70
00:03:16,640 --> 00:03:19,270
‫Dan banyak layanan hosting sudah melakukannya di

71
00:03:19,270 --> 00:03:20,860
‫luar kotak, oke?

72
00:03:20,860 --> 00:03:23,170
‫Jadi, sepenuhnya otomatis tanpa kita

73
00:03:23,170 --> 00:03:24,980
‫harus melakukan apapun.

74
00:03:24,980 --> 00:03:27,820
‫Sekarang, di Node. js, bukanlah praktik

75
00:03:27,820 --> 00:03:31,580
‫yang baik untuk hanya mengandalkan kedua penangan kesalahan yang baru

76
00:03:31,580 --> 00:03:34,170
‫saja kita terapkan di sini, oke?

77
00:03:34,170 --> 00:03:36,470
‫Jadi idealnya kesalahan harus benar-benar ditangani

78
00:03:36,470 --> 00:03:38,120
‫tepat di tempat terjadinya.

79
00:03:38,120 --> 00:03:42,150
‫Jadi misalnya, dalam masalah koneksi ke database, tentu saja kita harus

80
00:03:42,150 --> 00:03:44,660
‫menambahkan catch handler di sana dan

81
00:03:44,660 --> 00:03:46,480
‫tidak hanya mengandalkan callback

82
00:03:46,480 --> 00:03:50,160
‫penolakan yang tidak tertangani yang kita miliki di sini, oke?

83
00:03:50,160 --> 00:03:53,600
‫Dan beberapa orang bahkan mengatakan bahwa kita tidak boleh menggunakan ini sama sekali, tetapi saya

84
00:03:53,600 --> 00:03:54,770
‫tidak setuju dengan itu.

85
00:03:54,770 --> 00:03:58,090
‫Saya pikir sebagai jaring pengaman, katakanlah,

86
00:03:58,090 --> 00:04:02,470
‫mereka bisa sangat berguna dan berperan dalam aplikasi kita.

87
00:04:02,470 --> 00:04:04,020
‫Sekarang sebenarnya handler ini

88
00:04:04,020 --> 00:04:07,300
‫harus berada di bagian paling atas dari kode kita, oke?

89
00:04:07,300 --> 00:04:11,280
‫Atau setidaknya sebelum kode lain benar-benar dieksekusi.

90
00:04:11,280 --> 00:04:14,980
‫Karena perhatikan apa yang terjadi jika saya memindahkan baris kode ini ke

91
00:04:14,980 --> 00:04:16,513
‫sini sebelum handler ini.

92
00:04:17,350 --> 00:04:19,593
‫Jadi jika saya meletakkannya di sini,

93
00:04:21,140 --> 00:04:23,070
‫misalnya, dan kemudian menyimpannya, maka

94
00:04:23,070 --> 00:04:24,680
‫Anda benar-benar melihat

95
00:04:24,680 --> 00:04:29,410
‫bahwa pawang kami tidak menangkap pengecualian ini, jadi kesalahan ini di sini, bukan?

96
00:04:29,410 --> 00:04:31,830
‫Dan itu karena hanya di sini

97
00:04:31,830 --> 00:04:35,010
‫di akhir kita benar-benar mulai mendengarkan pengecualian yang tidak tertangkap.

98
00:04:35,010 --> 00:04:37,580
‫Tetapi dalam kasus ini di sini, pengecualian yang

99
00:04:37,580 --> 00:04:40,380
‫tidak tertangkap terjadi bahkan sebelum kita mendengarkan acara itu.

100
00:04:40,380 --> 00:04:44,630
‫Dan karena itu, kita tidak punya cara untuk menangkapnya, bukan?

101
00:04:44,630 --> 00:04:48,920
‫Jadi idealnya kita harus meletakkannya di sini, tepat di atas, sekali

102
00:04:48,920 --> 00:04:51,030
‫lagi sebelum kode lain dijalankan.

103
00:04:51,030 --> 00:04:53,423
‫Terutama yang ada di aplikasi kita.

104
00:04:54,580 --> 00:04:57,760
‫Jadi mari kita meletakkannya benar-benar di sini.

105
00:04:57,760 --> 00:04:59,550
‫Sekarang masalahnya di sini

106
00:04:59,550 --> 00:05:02,820
‫adalah bahwa server tidak ditentukan pada saat ini.

107
00:05:02,820 --> 00:05:04,160
‫Tapi itu tidak

108
00:05:04,160 --> 00:05:06,180
‫masalah, karena sebenarnya kita tidak membutuhkan

109
00:05:06,180 --> 00:05:08,060
‫server di sini sama sekali, oke?

110
00:05:08,060 --> 00:05:09,480
‫Dan itu karena kesalahan

111
00:05:09,480 --> 00:05:11,270
‫ini, jadi pengecualian yang tidak tertangkap

112
00:05:11,270 --> 00:05:13,670
‫ini, mereka tidak akan terjadi secara tidak sinkron.

113
00:05:13,670 --> 00:05:15,630
‫Jadi mereka tidak akan

114
00:05:15,630 --> 00:05:17,660
‫ada hubungannya dengan server sebenarnya.

115
00:05:17,660 --> 00:05:19,360
‫Jadi kita tidak membutuhkan ini di sini sama sekali.

116
00:05:20,470 --> 00:05:22,250
‫Kami hanya dapat menyimpannya di

117
00:05:22,250 --> 00:05:25,480
‫sini, dan sekarang kami memilikinya sebelum kami benar-benar membutuhkan

118
00:05:25,480 --> 00:05:26,890
‫aplikasi utama kami.

119
00:05:26,890 --> 00:05:28,663
‫Jadi jika kita sekarang memiliki kesalahan,

120
00:05:29,940 --> 00:05:31,850
‫mari kita coba dulu di sini,

121
00:05:31,850 --> 00:05:33,500
‫jadi Anda melihat bahwa

122
00:05:33,500 --> 00:05:36,710
‫sekarang kita kembali untuk benar-benar menangkapnya di penangan kesalahan kita.

123
00:05:36,710 --> 00:05:41,333
‫Tetapi jika kita sekarang memiliki kode ini, misalnya di dalam app. js, katakanlah, itu tidak terlalu

124
00:05:42,350 --> 00:05:45,810
‫penting, katakan saja itu ada di sini, dan

125
00:05:45,810 --> 00:05:47,410
‫jika kita sekarang

126
00:05:47,410 --> 00:05:50,260
‫menjalankan ini, maka Anda melihat bahwa

127
00:05:50,260 --> 00:05:52,530
‫kita masih menangkap pengecualian itu

128
00:05:52,530 --> 00:05:56,290
‫di penangan kesalahan kita, yang sebelumnya tidak akan terjadi.

129
00:05:56,290 --> 00:05:57,180
‫Baiklah?

130
00:05:57,180 --> 00:05:59,590
‫Dan sekarang hanya untuk

131
00:05:59,590 --> 00:06:03,120
‫percobaan, bagaimana menurut Anda jika kita meletakkan kode

132
00:06:03,120 --> 00:06:06,100
‫ini di sini di fungsi middleware ini?

133
00:06:06,100 --> 00:06:07,690
‫Menurutmu apa yang akan terjadi

134
00:06:07,690 --> 00:06:09,510
‫jika kita menyimpan file ini sekarang?

135
00:06:09,510 --> 00:06:12,200
‫Jadi x masih belum didefinisikan di mana pun, tetapi mari

136
00:06:12,200 --> 00:06:13,840
‫kita lihat apa yang terjadi saat

137
00:06:13,840 --> 00:06:15,373
‫kita menjalankan kode ini.

138
00:06:16,980 --> 00:06:19,510
‫Dan sekarang kita sebenarnya tidak memiliki kesalahan.

139
00:06:19,510 --> 00:06:21,300
‫Atau sebenarnya kami melakukannya,

140
00:06:21,300 --> 00:06:24,130
‫tetapi itu hanya karena penolakan kami yang tidak tertangani,

141
00:06:24,130 --> 00:06:26,020
‫yang disebabkan oleh fakta bahwa kata

142
00:06:26,020 --> 00:06:27,920
‫sandi kami di sini masih salah.

143
00:06:29,290 --> 00:06:32,170
‫Jadi jika kami menyimpannya dan sekarang menyimpannya lagi, Anda

144
00:06:32,170 --> 00:06:34,560
‫seharusnya tidak melihat kesalahan sama sekali.

145
00:06:34,560 --> 00:06:35,730
‫Dan memang, kita tidak.

146
00:06:35,730 --> 00:06:36,953
‫Dan mengapa begitu?

147
00:06:37,830 --> 00:06:40,940
‫Nah, karena fungsi middleware di sini

148
00:06:40,940 --> 00:06:42,450
‫tentu baru

149
00:06:42,450 --> 00:06:45,220
‫dipanggil begitu ada permintaan, kan?

150
00:06:45,220 --> 00:06:48,113
‫Jadi mari kita lihat apa yang terjadi saat kita melakukan permintaan.

151
00:06:50,760 --> 00:06:54,180
‫Jadi mari kita lakukan permintaan Dapatkan Semua Tur.

152
00:06:54,180 --> 00:06:55,720
‫Dan mari kita tunggu.

153
00:06:55,720 --> 00:06:58,980
‫Dan, di sini kita mendapatkan pesan "Ada yang salah! " pesan

154
00:06:58,980 --> 00:07:01,420
‫kesalahan dengan 500, dan itu

155
00:07:01,420 --> 00:07:03,560
‫juga karena kami masih

156
00:07:03,560 --> 00:07:05,820
‫dalam mode produksi, oke?

157
00:07:05,820 --> 00:07:08,990
‫Tapi bagaimanapun, mendapatkan pesan ini di sini, ingat,

158
00:07:08,990 --> 00:07:12,120
‫berarti kita memiliki kesalahan nonoperasional di sini.

159
00:07:12,120 --> 00:07:15,630
‫Jadi pada dasarnya kesalahan itu tidak kita buat sendiri.

160
00:07:15,630 --> 00:07:19,580
‫Jadi, benar ini, kita sekarang masuk ke

161
00:07:19,580 --> 00:07:24,380
‫sini di errorController kita, kita langsung ke sini, kan?

162
00:07:24,380 --> 00:07:28,780
‫Jadi ke cabang lain ini di sini di fungsi sendErrorProd.

163
00:07:28,780 --> 00:07:30,380
‫Dan sebenarnya Anda juga

164
00:07:30,380 --> 00:07:32,970
‫melihat kesalahan di sini di konsol, oke?

165
00:07:32,970 --> 00:07:35,600
‫Dan itulah yang terjadi ketika

166
00:07:35,600 --> 00:07:39,430
‫ada kesalahan di dalam middleware Express apa pun, bukan?

167
00:07:39,430 --> 00:07:41,370
‫Jadi Express, ketika ada kesalahan,

168
00:07:41,370 --> 00:07:44,480
‫secara otomatis akan masuk ke middleware penanganan kesalahan

169
00:07:44,480 --> 00:07:46,330
‫dengan kesalahan itu, oke?

170
00:07:46,330 --> 00:07:48,100
‫Dan itulah mengapa ketika

171
00:07:48,100 --> 00:07:50,410
‫kita mendapatkan kesalahan di sini di salah

172
00:07:50,410 --> 00:07:55,240
‫satu fungsi middleware kita, itu akan segera masuk ke sini ke handler ini, oke?

173
00:07:55,240 --> 00:07:56,520
‫Dan karena

174
00:07:56,520 --> 00:07:58,730
‫kita dalam produksi, itu akan memasuki

175
00:07:58,730 --> 00:08:00,994
‫blok ini di sini, tetapi karena

176
00:08:00,994 --> 00:08:03,700
‫itu bukan CastError, dan bukan kesalahan ini, dan

177
00:08:03,700 --> 00:08:06,830
‫bukan ValidationError, maka segera setelah kesalahan benar-benar dikirim, di

178
00:08:06,830 --> 00:08:09,640
‫sini, kami kemudian masuk ke blok ini .

179
00:08:09,640 --> 00:08:14,640
‫Dan sekali lagi, itulah mengapa kami mengirimkan kesalahan umum ini, oke?

180
00:08:15,235 --> 00:08:17,500
‫Sekarang mari kita benar-benar keluar dari mode

181
00:08:17,500 --> 00:08:20,053
‫ini di sini dan kembali ke awal npm normal kita.

182
00:08:22,310 --> 00:08:26,130
‫Jadi sekarang, kesalahan kita akan dikirim seperti ini, kan?

183
00:08:26,130 --> 00:08:29,440
‫Jadi kirim kesalahan pengembangan akan memberi kami semua

184
00:08:29,440 --> 00:08:31,773
‫detail tentang kesalahan yang terjadi.

185
00:08:33,610 --> 00:08:38,490
‫Dan sekarang memang kita mendapatkan ReferenceError: x is not didefinisikan.

186
00:08:38,490 --> 00:08:39,323
‫Oke?

187
00:08:39,323 --> 00:08:41,533
‫Jadi di aplikasi. js, baris 21.

188
00:08:42,480 --> 00:08:46,300
‫Jadi, baris 21 adalah tempatnya, tapi mari kita

189
00:08:46,300 --> 00:08:47,520
‫singkirkan itu.

190
00:08:47,520 --> 00:08:49,760
‫Aku hanya ingin menunjukkannya padamu.

191
00:08:49,760 --> 00:08:51,350
‫Oke?

192
00:08:51,350 --> 00:08:53,770
‫Bagaimanapun, dengan ini, kami sebenarnya menutup

193
00:08:53,770 --> 00:08:55,620
‫bagian penanganan kesalahan kami.

194
00:08:55,620 --> 00:08:58,830
‫Dan mungkin ada seluruh kursus tentang penanganan kesalahan

195
00:08:58,830 --> 00:09:01,940
‫dengan Node dan Express, karena ini benar-benar

196
00:09:01,940 --> 00:09:03,830
‫topik yang sangat kompleks.

197
00:09:03,830 --> 00:09:06,470
‫Namun, di bagian ini, Anda mempelajari hal-hal penting

198
00:09:06,470 --> 00:09:08,830
‫yang perlu Anda ketahui untuk benar-benar mulai

199
00:09:08,830 --> 00:09:10,943
‫membuat aplikasi yang luar biasa.

