﻿1
00:00:01,100 --> 00:00:02,750
‫Guru: Dalam video ini, mari

2
00:00:02,750 --> 00:00:05,470
‫kita membuat kelas kesalahan yang lebih baik dan lebih

3
00:00:05,470 --> 00:00:07,373
‫berguna, dan juga melakukan beberapa refactoring.

4
00:00:09,210 --> 00:00:11,870
‫Dan mulai dengan kelas kesalahan itu,

5
00:00:11,870 --> 00:00:15,053
‫mari buat file baru di folder Utilitas kita.

6
00:00:15,950 --> 00:00:18,990
‫Jadi, file baru, dan saya

7
00:00:20,980 --> 00:00:25,820
‫akan menyebutnya AppError karena itu akan menjadi nama kelasnya, oke?

8
00:00:25,820 --> 00:00:30,820
‫Jadi, kelas AppError, dan kita sebenarnya ingin semua objek

9
00:00:30,867 --> 00:00:34,780
‫AppError kita mewarisi dari kesalahan bawaan,

10
00:00:34,780 --> 00:00:39,260
‫jadi mari kita perluas kelas kesalahan bawaan.

11
00:00:39,260 --> 00:00:43,720
‫Jadi, kami menggunakan Extends Error, oke?

12
00:00:43,720 --> 00:00:46,870
‫Jadi, kita pernah melakukannya di suatu tempat

13
00:00:46,870 --> 00:00:50,950
‫di kursus ini, dan sekali lagi ini hanya kelas ES6, oke?

14
00:00:50,950 --> 00:00:52,920
‫Dalam hal ini, pewarisan

15
00:00:52,920 --> 00:00:56,790
‫kelas, di mana satu kelas mewarisi dari yang lain, oke?

16
00:00:56,790 --> 00:00:59,300
‫Kemudian, seperti biasa, konstruktor kita, dan

17
00:00:59,300 --> 00:01:01,800
‫apa yang akan kita berikan

18
00:01:01,800 --> 00:01:04,490
‫ke objek baru yang dibuat dari

19
00:01:04,490 --> 00:01:08,660
‫kelas AppError akan menjadi pesan dan kode status, jadi hanya

20
00:01:08,660 --> 00:01:09,853
‫dua ini.

21
00:01:11,330 --> 00:01:15,130
‫Oke, jadi, ingat metode konstruktor dipanggil setiap

22
00:01:15,130 --> 00:01:19,210
‫kali kita membuat objek baru dari kelas ini.

23
00:01:19,210 --> 00:01:22,116
‫Sekarang, seperti biasa, ketika kami memperluas

24
00:01:22,116 --> 00:01:25,760
‫kelas induk, kami memanggil super untuk memanggil konstruktor

25
00:01:25,760 --> 00:01:28,203
‫induk, baiklah, dan kami

26
00:01:30,100 --> 00:01:33,580
‫melakukannya dengan pesan karena pesan sebenarnya adalah

27
00:01:33,580 --> 00:01:37,160
‫satu-satunya parameter yang diterima oleh kesalahan bawaan.

28
00:01:37,160 --> 00:01:40,990
‫Oke, jadi ini pada dasarnya Anda, seperti, kesalahan

29
00:01:40,990 --> 00:01:44,305
‫panggilan, baiklah, dan kemudian ini adalah

30
00:01:44,305 --> 00:01:46,160
‫hal-hal yang biasa,

31
00:01:48,300 --> 00:01:53,030
‫kami mengatur statusCode ke statusCode, baiklah, dan sekarang kami

32
00:01:53,030 --> 00:01:56,463
‫juga ingin mengatur status itu sendiri.

33
00:01:58,200 --> 00:02:01,670
‫Jadi, ingat statusnya bisa gagal atau error, dan kita

34
00:02:01,670 --> 00:02:03,920
‫bisa meneruskannya ke objek, tapi

35
00:02:03,920 --> 00:02:05,700
‫itu juga tidak

36
00:02:05,700 --> 00:02:08,530
‫terlalu diperlukan, karena statusnya tergantung pada statusCode.

37
00:02:08,530 --> 00:02:10,880
‫Jadi, ketika statusCode adalah 400, maka

38
00:02:10,880 --> 00:02:12,630
‫statusnya akan gagal,

39
00:02:12,630 --> 00:02:16,230
‫dan jika 500, maka itu akan menjadi kesalahan, kan,

40
00:02:16,230 --> 00:02:18,336
‫dan itu hanya menguji apakah

41
00:02:18,336 --> 00:02:20,420
‫statusCode dimulai dengan empat.

42
00:02:20,420 --> 00:02:23,800
‫Jadi, dalam JavaScript, ada metode startWith yang dapat kita

43
00:02:23,800 --> 00:02:25,540
‫panggil pada string, jadi

44
00:02:25,540 --> 00:02:28,100
‫saya pikir itu cara termudah untuk melakukan

45
00:02:28,100 --> 00:02:31,363
‫tes ini, dan pada dasarnya mengubah statusCode menjadi string,

46
00:02:32,780 --> 00:02:35,610
‫dan untuk itu saya hanya menggunakan template string

47
00:02:35,610 --> 00:02:38,030
‫dengan kode di sana, jadi ini,

48
00:02:38,030 --> 00:02:40,380
‫atau sebenarnya kita bisa menggunakan statusCode.

49
00:02:41,781 --> 00:02:42,614
‫Jadi,

50
00:02:47,001 --> 00:02:48,750
‫statusCode, dan kemudian startWith, maka

51
00:02:48,750 --> 00:02:51,120
‫di sini kita juga membutuhkan string, dan

52
00:02:51,120 --> 00:02:54,330
‫jika statusCode sebagai string dimulai dengan empat, maka kita gagal.

53
00:02:54,330 --> 00:02:58,360
‫Jadi di sini, mari kita gunakan ternary,

54
00:02:58,360 --> 00:03:02,120
‫oke, jadi itu gagal ketika dimulai

55
00:03:02,120 --> 00:03:06,890
‫dengan empat, dan jika tidak, itu adalah kesalahan, oke?

56
00:03:06,890 --> 00:03:09,550
‫Jadi, sangat sederhana, dan ini sudah menyelamatkan

57
00:03:09,550 --> 00:03:13,250
‫kita dari harus lulus secara manual baik gagal atau kesalahan.

58
00:03:13,250 --> 00:03:15,240
‫Baiklah, sekarang selanjutnya, semua kesalahan

59
00:03:15,240 --> 00:03:17,120
‫yang akan kita

60
00:03:17,120 --> 00:03:20,300
‫buat menggunakan kelas ini semuanya adalah kesalahan operasional.

61
00:03:20,300 --> 00:03:22,070
‫Jadi, kesalahan yang

62
00:03:22,070 --> 00:03:24,130
‫bisa kita prediksi akan terjadi di

63
00:03:24,130 --> 00:03:26,010
‫beberapa titik di masa depan,

64
00:03:26,010 --> 00:03:29,560
‫seperti misalnya pengguna membuat tur tanpa bidang yang diperlukan, bukan?

65
00:03:29,560 --> 00:03:32,380
‫Jadi itu adalah kesalahan operasional, oke, dan

66
00:03:32,380 --> 00:03:34,660
‫sekali lagi, mulai sekarang, kami akan

67
00:03:34,660 --> 00:03:37,125
‫selalu menggunakan kelas AppError ini di

68
00:03:37,125 --> 00:03:39,070
‫sini yang kami buat

69
00:03:39,070 --> 00:03:42,230
‫sekarang untuk membuat semua kesalahan dalam aplikasi kami.

70
00:03:42,230 --> 00:03:44,730
‫Jadi kesalahan ini akan menjadi kesalahan operasional, jadi

71
00:03:44,730 --> 00:03:46,250
‫yang akan saya lakukan

72
00:03:46,250 --> 00:03:49,663
‫sekarang adalah membuat file . adalah properti operasional di sini.

73
00:03:50,980 --> 00:03:53,133
‫Jadi ini. beroperasi, dan

74
00:03:56,100 --> 00:03:57,380
‫setel ke true.

75
00:03:57,380 --> 00:03:59,240
‫Jadi semua kesalahan kami akan

76
00:03:59,240 --> 00:04:01,680
‫membuat properti ini disetel ke true,

77
00:04:01,680 --> 00:04:03,420
‫dan saya melakukannya

78
00:04:03,420 --> 00:04:05,890
‫agar nanti kami dapat menguji properti ini

79
00:04:05,890 --> 00:04:07,910
‫dan hanya mengirim pesan kesalahan

80
00:04:07,910 --> 00:04:10,360
‫kembali ke klien untuk kesalahan operasional

81
00:04:10,360 --> 00:04:12,510
‫yang kami buat menggunakan kelas ini.

82
00:04:12,510 --> 00:04:14,550
‫Dan ini berguna karena beberapa

83
00:04:14,550 --> 00:04:17,210
‫kesalahan tak terduga gila lainnya yang mungkin

84
00:04:17,210 --> 00:04:19,964
‫terjadi di aplikasi kita, misalnya kesalahan pemrograman, atau

85
00:04:19,964 --> 00:04:22,360
‫beberapa bug di salah satu paket yang

86
00:04:22,360 --> 00:04:24,550
‫kita perlukan ke dalam aplikasi kita,

87
00:04:24,550 --> 00:04:26,100
‫dan kesalahan ini

88
00:04:26,100 --> 00:04:29,610
‫tentu saja tidak akan terjadi. adalah properti operasional

89
00:04:29,610 --> 00:04:31,610
‫pada mereka, baiklah, dan mungkin terdengar

90
00:04:31,610 --> 00:04:33,370
‫agak membingungkan pada saat ini,

91
00:04:33,370 --> 00:04:35,220
‫tapi jangan khawatir, itu akan

92
00:04:35,220 --> 00:04:37,040
‫sangat masuk akal ketika kita

93
00:04:37,040 --> 00:04:39,860
‫kemudian mengimplementasikan bagian yang baru saja saya sebutkan.

94
00:04:39,860 --> 00:04:43,740
‫Jadi, pengujian untuk ini. adalah properti operasional di sini.

95
00:04:43,740 --> 00:04:46,190
‫Baiklah, dan sekarang hanya satu langkah

96
00:04:46,190 --> 00:04:50,270
‫terakhir adalah bahwa kita sebenarnya juga perlu menangkap jejak tumpukan.

97
00:04:50,270 --> 00:04:53,090
‫Sekarang, apa yang saya maksud dengan stack trace?

98
00:04:53,090 --> 00:04:55,430
‫Jadi, izinkan saya menunjukkannya kepada

99
00:04:55,430 --> 00:04:58,380
‫Anda, jadi, tunjukkan apa itu stack trace, jadi

100
00:04:58,380 --> 00:05:01,093
‫saya akan mencatatnya di sini ke konsol.

101
00:05:02,180 --> 00:05:05,053
‫Menghibur. log dan kesalahan. stackTrace,

102
00:05:06,390 --> 00:05:10,350
‫jadi setiap kesalahan mendapatkan jejak tumpukan ini,

103
00:05:10,350 --> 00:05:13,370
‫dan sebenarnya itu hanya tumpukan, oke.

104
00:05:13,370 --> 00:05:15,820
‫Jadi salah. stack pada dasarnya akan

105
00:05:15,820 --> 00:05:17,743
‫menunjukkan kepada kita di mana kesalahan terjadi.

106
00:05:19,320 --> 00:05:20,743
‫Jadi biarkan saya menjalankan

107
00:05:22,450 --> 00:05:24,303
‫ini di sini sekarang, jadi mari kita

108
00:05:26,420 --> 00:05:28,000
‫lihat ini, dan itu memberi

109
00:05:28,000 --> 00:05:31,290
‫kita kesalahan di sini dan juga di mana itu terjadi, oke?

110
00:05:31,290 --> 00:05:33,040
‫Jadi, dalam hal ini di sini,

111
00:05:33,040 --> 00:05:36,390
‫tentu saja, tambahkan app. js pada baris 32.

112
00:05:36,390 --> 00:05:38,810
‫Jadi, di sini.

113
00:05:38,810 --> 00:05:40,470
‫Jadi, di situlah kami

114
00:05:40,470 --> 00:05:42,200
‫membuat kesalahan ini, dan sekarang

115
00:05:42,200 --> 00:05:44,972
‫ada dalam jejak tumpukan kami, dan itu juga menunjukkan

116
00:05:44,972 --> 00:05:49,972
‫kepada kami seluruh tumpukan panggilan di sini, yang pada akhirnya berasal dari kesalahan ini, oke?

117
00:05:50,400 --> 00:05:52,440
‫Jadi kami ingin mempertahankannya

118
00:05:52,440 --> 00:05:56,500
‫dan juga pada saat yang sama tidak menambahkan metode ini

119
00:05:56,500 --> 00:06:00,390
‫di sini, atau kelas ini, ke trek tumpukan itu, oke?

120
00:06:00,390 --> 00:06:02,350
‫Dan lagi, kedengarannya agak membingungkan,

121
00:06:02,350 --> 00:06:03,980
‫saya tahu, tapi dalam

122
00:06:03,980 --> 00:06:06,359
‫hal ini tidak terlalu penting, yang

123
00:06:06,359 --> 00:06:09,100
‫penting kita hanya menambahkan baris kode ini di

124
00:06:09,100 --> 00:06:11,873
‫sini, yaitu Error. capturestackTrace, jadi persis apa

125
00:06:13,670 --> 00:06:16,160
‫yang Anda dapatkan di sini, dan

126
00:06:16,160 --> 00:06:19,490
‫pada awalnya kita perlu menentukan objek saat ini,

127
00:06:19,490 --> 00:06:23,530
‫yaitu ini, dan kemudian kelas AppError itu sendiri, yang akan

128
00:06:23,530 --> 00:06:26,113
‫menjadi ini. konstruktor.

129
00:06:28,340 --> 00:06:31,220
‫Oke, jadi begini ketika objek baru dibuat,

130
00:06:31,220 --> 00:06:34,361
‫dan fungsi konstruktor dipanggil, maka pemanggilan fungsi itu

131
00:06:34,361 --> 00:06:36,388
‫tidak akan muncul di

132
00:06:36,388 --> 00:06:38,863
‫jejak tumpukan, dan tidak akan mencemarinya.

133
00:06:40,240 --> 00:06:41,073
‫Baiklah,

134
00:06:42,250 --> 00:06:44,920
‫jadi mari kita taruh di

135
00:06:44,920 --> 00:06:48,280
‫sini, dan ya, jadi itu kelas AppError kita,

136
00:06:48,280 --> 00:06:51,363
‫jadi sekarang kita benar-benar mengekspornya dari sini.

137
00:06:52,450 --> 00:06:56,443
‫Jadi, modul. ekspor tentu saja AppError.

138
00:06:57,340 --> 00:07:00,367
‫Bagus, hanya satu pertanyaan yang mungkin Anda miliki adalah 'Mengapa

139
00:07:00,367 --> 00:07:04,720
‫saya tidak mengatur ini. pesan sama dengan pesan? ' Yah,

140
00:07:04,720 --> 00:07:07,600
‫itu hanya karena di sini saya memanggil

141
00:07:07,600 --> 00:07:10,253
‫kelas induknya, benar, dan kelas induknya adalah

142
00:07:10,253 --> 00:07:13,380
‫kesalahan, dan apa pun yang kita masukkan ke

143
00:07:13,380 --> 00:07:15,350
‫dalamnya akan menjadi properti pesan.

144
00:07:15,350 --> 00:07:16,860
‫Jadi seperti yang saya katakan sebelumnya.

145
00:07:16,860 --> 00:07:20,880
‫Jadi, pada dasarnya, di sini dengan melakukan panggilan induk ini, kita

146
00:07:20,880 --> 00:07:22,890
‫telah menyetel properti pesan ke

147
00:07:22,890 --> 00:07:24,463
‫pesan masuk kita.

148
00:07:25,970 --> 00:07:28,500
‫Baiklah, simpan, dan sekarang kita bisa menutupnya, kita tidak

149
00:07:28,500 --> 00:07:29,653
‫membutuhkannya lagi, dan

150
00:07:30,770 --> 00:07:32,933
‫di sini kita hanya akan mengimpornya di sini.

151
00:07:34,621 --> 00:07:35,871
‫Const AppError,

152
00:07:38,980 --> 00:07:39,883
‫require,

153
00:07:41,560 --> 00:07:43,600
‫dan kemudian di

154
00:07:43,600 --> 00:07:48,320
‫utils, jadi Utilities, dan appError, oke, dan sekarang

155
00:07:48,320 --> 00:07:51,423
‫mari kita lanjutkan dan menggunakannya.

156
00:07:53,280 --> 00:07:55,070
‫Komentari bagian kode ini, dan

157
00:07:55,070 --> 00:07:57,420
‫hapus salah satu yang kita miliki sebelumnya,

158
00:07:58,860 --> 00:08:00,210
‫dan itu sekarang

159
00:08:00,210 --> 00:08:02,650
‫akan membuat kesalahan di sini di dalam berikutnya.

160
00:08:02,650 --> 00:08:04,433
‫Jadi, AppError baru, lalu

161
00:08:06,600 --> 00:08:07,783
‫pesannya, yang

162
00:08:09,430 --> 00:08:10,793
‫ini, dan kode

163
00:08:12,910 --> 00:08:14,023
‫statusnya.

164
00:08:15,620 --> 00:08:18,410
‫Benar, dan yang gagal, ingat, akan

165
00:08:18,410 --> 00:08:22,480
‫secara otomatis diketahui, jadi mari kita hapus semua ini,

166
00:08:22,480 --> 00:08:23,723
‫simpan di

167
00:08:25,320 --> 00:08:29,630
‫sini, dan sekali lagi, uji rute yang salah ini, dan

168
00:08:29,630 --> 00:08:32,940
‫memang kita masih mendapatkan kesalahan yang sama,

169
00:08:32,940 --> 00:08:37,530
‫dan kami juga masih mendapatkan jejak tumpukan yang sama persis.

170
00:08:37,530 --> 00:08:40,280
‫Oke, dan akhirnya saya sebenarnya

171
00:08:40,280 --> 00:08:43,550
‫juga ingin mengekspor middleware ini ke sini, oke?

172
00:08:43,550 --> 00:08:45,260
‫Jadi pada dasarnya, handler ini

173
00:08:45,260 --> 00:08:47,150
‫karena di seluruh bagian lainnya, kita

174
00:08:47,150 --> 00:08:48,760
‫akan membangun beberapa fungsi

175
00:08:48,760 --> 00:08:51,700
‫berbeda untuk penanganan dengan jenis kesalahan yang berbeda, jadi

176
00:08:51,700 --> 00:08:53,280
‫saya ingin semua

177
00:08:53,280 --> 00:08:55,912
‫fungsi ini ada di file yang sama, oke?

178
00:08:55,912 --> 00:08:58,920
‫Dan kita dapat mengatakan bahwa semua

179
00:08:58,920 --> 00:09:02,310
‫fungsi yang baru saja saya sebutkan adalah penangan,

180
00:09:02,310 --> 00:09:05,320
‫oke, dan penangan, kami juga menyebutnya pengontrol

181
00:09:05,320 --> 00:09:08,240
‫dalam konteks arsitektur MVC, dan sekarang

182
00:09:08,240 --> 00:09:10,130
‫mari kita membuat

183
00:09:10,130 --> 00:09:13,253
‫file pengontrol kesalahan di folder pengontrol kita.

184
00:09:14,190 --> 00:09:18,280
‫Oke, dan ini mungkin terdengar atau terlihat agak aneh karena kita sebenarnya

185
00:09:18,280 --> 00:09:21,330
‫tidak memiliki sumber kesalahan, jadi mungkin beberapa orang akan

186
00:09:22,200 --> 00:09:24,940
‫tidak setuju dengan saya bahwa ini adalah tempat

187
00:09:24,940 --> 00:09:26,923
‫yang benar, tetapi saya pribadi

188
00:09:28,540 --> 00:09:31,100
‫suka melakukannya seperti ini karena di pada

189
00:09:31,100 --> 00:09:32,520
‫akhirnya, fungsi-fungsi

190
00:09:32,520 --> 00:09:34,910
‫ini, mereka seperti benar-benar untuk mengendalikan

191
00:09:34,910 --> 00:09:37,370
‫kesalahan kita, baiklah, dan bagi saya setidaknya

192
00:09:37,370 --> 00:09:39,570
‫masuk akal untuk memanggil fungsi ini

193
00:09:39,570 --> 00:09:43,140
‫di sini pengontrol kesalahan, dan di sini saya ingin menempelkan

194
00:09:43,140 --> 00:09:46,500
‫fungsi middleware itu , tapi saya rasa saya tidak

195
00:09:46,500 --> 00:09:49,173
‫menyalinnya, jadi mari kita lakukan itu lagi.

196
00:09:51,010 --> 00:09:53,540
‫Baiklah, dan sebenarnya saya akan mengekspor yang ini

197
00:09:53,540 --> 00:09:56,240
‫ke sini sebagai modul. ekspor karena

198
00:09:56,240 --> 00:09:57,676
‫fungsi pegangan lain

199
00:09:57,676 --> 00:09:59,606
‫yang akan kita buat

200
00:09:59,606 --> 00:10:02,440
‫nanti, saya tidak akan mengekspornya dari sini.

201
00:10:02,440 --> 00:10:05,453
‫Jadi mereka hanya akan menjadi pembantu.

202
00:10:06,320 --> 00:10:11,320
‫Jadi, modul. ekspor sama dengan fungsi ini, oke?

203
00:10:12,210 --> 00:10:15,420
‫Mari kita benar-benar menyingkirkan konsol ini. login di sini,

204
00:10:15,420 --> 00:10:18,510
‫simpan, dan sekarang kembali ke aplikasi kita,

205
00:10:18,510 --> 00:10:21,080
‫tentu saja kita sekarang perlu mencolokkan

206
00:10:21,080 --> 00:10:23,040
‫fungsi middleware di sini.

207
00:10:23,040 --> 00:10:25,660
‫Jadi, mari kita lanjutkan dan mengimpornya

208
00:10:26,700 --> 00:10:28,710
‫dan saya dapat menyebutnya apa

209
00:10:28,710 --> 00:10:29,760
‫pun

210
00:10:30,802 --> 00:10:32,635
‫yang saya inginkan, jadi

211
00:10:34,679 --> 00:10:36,853
‫izinkan saya menyebutnya globalErrorHandler dengan

212
00:10:38,650 --> 00:10:39,840
‫huruf kapital H,

213
00:10:42,300 --> 00:10:45,033
‫dan saya akan memerlukan pengontrol dan errorController.

214
00:10:49,700 --> 00:10:52,660
‫Letakkan kembali di sini, dan sekarang untuk tes

215
00:10:52,660 --> 00:10:54,343
‫terakhir setelah refactoring ini.

216
00:10:55,810 --> 00:10:58,970
‫Mari kita lihat, dan memang

217
00:10:58,970 --> 00:11:03,040
‫sekali lagi, semuanya bekerja dengan baik, oke?

218
00:11:03,040 --> 00:11:06,490
‫Jadi, sempurna, itulah tujuan dari video ini, sampai jumpa

219
00:11:06,490 --> 00:11:07,690
‫di video berikutnya.

