﻿1
00:00:01,050 --> 00:00:02,840
‫Instruktur: Sekarang mari kita

2
00:00:02,840 --> 00:00:04,780
‫lebih banyak menggunakan bisnis kelas

3
00:00:04,780 --> 00:00:07,400
‫AppError kita dengan menambahkan beberapa kesalahan 404

4
00:00:07,400 --> 00:00:09,493
‫dan beberapa fungsi pengendali tur kita.

5
00:00:10,446 --> 00:00:12,740
‫Sekarang hanya satu hal yang

6
00:00:12,740 --> 00:00:16,030
‫ingin saya katakan sebelum kita benar-benar menerapkan kesalahan

7
00:00:16,030 --> 00:00:19,640
‫404 ini adalah tentu saja kita bisa menggunakan fungsi

8
00:00:19,640 --> 00:00:22,290
‫catchAsync juga di router kita, oke?

9
00:00:22,290 --> 00:00:24,940
‫Jadi, izinkan saya menunjukkan kepada Anda bagaimana itu akan berhasil.

10
00:00:24,940 --> 00:00:27,090
‫Jadi, di TourRoutes,

11
00:00:27,090 --> 00:00:29,730
‫saya bisa membungkus fungsi

12
00:00:30,750 --> 00:00:34,530
‫ini di sini ke catchAsync seperti

13
00:00:34,530 --> 00:00:38,480
‫ini daripada melakukannya di sini di controller.

14
00:00:38,480 --> 00:00:41,400
‫Jadi, di sini di mana saya melakukannya sebenarnya, kan?

15
00:00:41,400 --> 00:00:44,200
‫Dan itu akan memiliki hasil yang sama persis

16
00:00:44,200 --> 00:00:45,950
‫tetapi saya tidak

17
00:00:45,950 --> 00:00:48,190
‫melakukannya dengan cara ini karena seperti

18
00:00:48,190 --> 00:00:50,110
‫ini, saya harus ingat yang

19
00:00:50,110 --> 00:00:52,350
‫mana dari metode ini di

20
00:00:52,350 --> 00:00:54,800
‫sini yang sebenarnya merupakan metode sinkronisasi, oke,

21
00:00:54,800 --> 00:00:58,960
‫sehingga hanya pada metode yang saya tambahkan fungsi catchAsync , Baik?

22
00:00:58,960 --> 00:01:02,150
‫Sekarang dalam kasus ini, sebenarnya semuanya adalah fungsi async

23
00:01:02,150 --> 00:01:05,700
‫dan jadi, bukan itu masalahnya di sini dalam contoh ini

24
00:01:05,700 --> 00:01:07,530
‫tetapi akan ada beberapa contoh

25
00:01:07,530 --> 00:01:11,150
‫nanti di mana tidak semua penangan adalah fungsi asinkron dan,

26
00:01:11,150 --> 00:01:12,170
‫dalam hal

27
00:01:12,170 --> 00:01:14,020
‫ini, saya akan benar-benar memilikinya

28
00:01:14,020 --> 00:01:17,100
‫untuk mengingat mana dari mereka yang harus saya

29
00:01:17,100 --> 00:01:18,600
‫bungkus ke catchAsync

30
00:01:18,600 --> 00:01:20,450
‫dan mana yang tidak dan

31
00:01:20,450 --> 00:01:23,930
‫sebagainya, dalam melakukannya di controller jauh lebih mudah karena hanya

32
00:01:23,930 --> 00:01:25,520
‫setiap kali saya menulis

33
00:01:25,520 --> 00:01:27,190
‫fungsi async di sini, mereka

34
00:01:27,190 --> 00:01:30,220
‫sudah tahu betul, saya perlu membungkus ke catchAsync.

35
00:01:30,220 --> 00:01:31,350
‫Oke.

36
00:01:31,350 --> 00:01:32,880
‫Jadi, saya tidak melakukannya

37
00:01:32,880 --> 00:01:36,400
‫di sini, saya hanya melakukannya seperti yang saya tunjukkan di video terakhir.

38
00:01:36,400 --> 00:01:39,680
‫Oke dan sebenarnya saya pernah mengalami bug yang sangat

39
00:01:39,680 --> 00:01:41,330
‫sulit ditemukan karena

40
00:01:41,330 --> 00:01:43,160
‫saya sebenarnya membungkus fungsi yang

41
00:01:43,160 --> 00:01:45,690
‫tidak async ke catchAsync dan sehingga kami

42
00:01:45,690 --> 00:01:47,850
‫benar-benar tidak berfungsi dan saya

43
00:01:47,850 --> 00:01:50,350
‫tidak tahu di mana bug itu dan

44
00:01:50,350 --> 00:01:52,830
‫membuang banyak waktu yang satu itu.

45
00:01:52,830 --> 00:01:56,820
‫Jadi, sejak itu, saya tidak lagi meletakkan catchAsync di sini tetapi

46
00:01:56,820 --> 00:01:59,610
‫sangat dekat dengan tempat saya benar-benar

47
00:01:59,610 --> 00:02:02,860
‫membutuhkannya, sangat dekat dengan kode yang sebenarnya tidak sinkron.

48
00:02:02,860 --> 00:02:04,640
‫Oke dan dengan itu,

49
00:02:04,640 --> 00:02:07,820
‫sekarang mari kita terapkan beberapa kesalahan 404 di sini.

50
00:02:07,820 --> 00:02:09,680
‫Baiklah, jadi saya ingin

51
00:02:09,680 --> 00:02:11,680
‫mulai dengan menunjukkan lagi contoh

52
00:02:11,680 --> 00:02:13,830
‫yang kami lakukan di video terakhir.

53
00:02:13,830 --> 00:02:16,350
‫Oke, jadi kami mencoba untuk mendapatkan

54
00:02:16,350 --> 00:02:19,780
‫tur untuk ID aneh ini yang sebenarnya tidak ada

55
00:02:19,780 --> 00:02:20,989
‫dan kesalahan

56
00:02:20,989 --> 00:02:23,690
‫yang kami dapatkan adalah bahwa pada

57
00:02:23,690 --> 00:02:26,410
‫dasarnya Mongoose tidak dapat mengubah string ini

58
00:02:26,410 --> 00:02:29,630
‫di sini menjadi ID yang valid untuk MongoDB.

59
00:02:29,630 --> 00:02:33,653
‫Tetapi apa yang terjadi ketika kita benar-benar menggunakan ID MongoDB yang valid?

60
00:02:34,750 --> 00:02:38,003
‫Jadi, misalnya, mari, ya, mari kita salin yang ini

61
00:02:38,003 --> 00:02:39,173
‫di sini,

62
00:02:41,660 --> 00:02:44,670
‫oke, dan yang ini tentu akan ada hasilnya

63
00:02:44,670 --> 00:02:47,770
‫dan jadi, mari kita ubah sedikit, jadi misalnya, mengubah

64
00:02:47,770 --> 00:02:50,060
‫ini menjadi nol di sini akan

65
00:02:50,060 --> 00:02:52,340
‫tetap menjadi ID yang valid ,

66
00:02:52,340 --> 00:02:53,900
‫jadi tampilannya seperti ini

67
00:02:53,900 --> 00:02:56,000
‫dan tampilannya sama persis seperti sebelumnya,

68
00:02:56,000 --> 00:02:57,440
‫saya hanya mengubah

69
00:02:57,440 --> 00:03:00,830
‫satu nomor tetapi ID ini mungkin tidak akan ada.

70
00:03:00,830 --> 00:03:03,470
‫Jadi, mari kita lihat apa yang kita dapatkan.

71
00:03:03,470 --> 00:03:06,810
‫Dan memang, sekarang hasil kami di sini adalah nol.

72
00:03:06,810 --> 00:03:10,340
‫Baiklah, jadi, sebenarnya bukan itu yang kita inginkan, bukan?

73
00:03:10,340 --> 00:03:14,550
‫Yang kami inginkan di sini adalah menunjukkan kode status 404 di sini

74
00:03:14,550 --> 00:03:17,310
‫dan mengatakan bahwa tur ini tidak ditemukan.

75
00:03:17,310 --> 00:03:20,750
‫Oke dan sekarang, mari kita gunakan kelas

76
00:03:20,750 --> 00:03:22,580
‫orAppError untuk mengimplementasikannya.

77
00:03:22,580 --> 00:03:24,040
‫Perlu diingat bahwa tur

78
00:03:24,040 --> 00:03:26,880
‫yang kita dapatkan kembali ke sini adalah nol, oke?

79
00:03:26,880 --> 00:03:29,453
‫Jadi, null yang sekarang dapat kita uji.

80
00:03:30,920 --> 00:03:33,533
‫Jadi, jika kita pergi ke handler getTour kita,

81
00:03:35,260 --> 00:03:40,260
‫sekarang mari kita implementasikan jika tidak ada tur dan dalam hal ini kita akan membuat

82
00:03:41,030 --> 00:03:43,390
‫atau kesalahan dan ini di sini berfungsi

83
00:03:44,410 --> 00:03:45,243
‫karena jika

84
00:03:45,243 --> 00:03:46,650
‫tidak ada tur, itu

85
00:03:46,650 --> 00:03:47,710
‫akan menjadi nol.

86
00:03:47,710 --> 00:03:51,610
‫Ingat dan dalam JavaScript, null adalah nilai fallacy, jadi nilai

87
00:03:51,610 --> 00:03:54,660
‫yang akan dikonversi menjadi false di sini

88
00:03:54,660 --> 00:03:56,250
‫dalam pernyataan if.

89
00:03:56,250 --> 00:03:58,060
‫Oke, dan begitu, jika tidak ada

90
00:03:58,060 --> 00:03:59,450
‫tur, maka tur

91
00:03:59,450 --> 00:04:01,790
‫itu salah dan tidak salah tentu saja

92
00:04:01,790 --> 00:04:04,830
‫benar dan begitu, begitulah cara kita memasukkan blok if ini.

93
00:04:04,830 --> 00:04:07,600
‫Jadi, apa yang ingin kita lakukan jika tidak ada tur?

94
00:04:07,600 --> 00:04:11,530
‫Nah, kita ingin membuat next dengan error.

95
00:04:11,530 --> 00:04:14,861
‫Jadi, untuk melompat langsung ke atau kesalahan dan

96
00:04:14,861 --> 00:04:15,990
‫middleware terkait.

97
00:04:15,990 --> 00:04:18,870
‫Jadi, kami membuat AppError baru yang

98
00:04:20,610 --> 00:04:23,350
‫belum tersedia, kami masih harus

99
00:04:23,350 --> 00:04:26,120
‫mengimpornya tetapi segera gunakan di sini.

100
00:04:26,120 --> 00:04:27,950
‫Oke, dan katakan

101
00:04:30,500 --> 00:04:34,673
‫saja Tidak ada tur yang ditemukan dengan ID itu.

102
00:04:35,580 --> 00:04:37,070
‫Dan kemudian kode

103
00:04:37,070 --> 00:04:40,940
‫status ingat adalah argumen kedua adalah 404, oke?

104
00:04:40,940 --> 00:04:43,460
‫Sekarang satu hal terakhir yang perlu kita

105
00:04:43,460 --> 00:04:46,470
‫lakukan di sini yaitu mengatakan kembali, oke karena

106
00:04:46,470 --> 00:04:49,410
‫kita ingin segera mengembalikan fungsi ini dan tidak

107
00:04:49,410 --> 00:04:52,250
‫melanjutkan ke baris berikutnya yang akan menjadi

108
00:04:52,250 --> 00:04:53,690
‫ini dan yang

109
00:04:53,690 --> 00:04:57,800
‫kemudian pada dasarnya akan mencoba mengirim dua tanggapan dan kita pernah

110
00:04:57,800 --> 00:05:00,210
‫mengalami kesalahan itu sebelumnya, jadi saya

111
00:05:00,210 --> 00:05:02,020
‫harap Anda akan mengingatnya

112
00:05:02,020 --> 00:05:05,580
‫dan itulah alasan mengapa kami selalu perlu kembali ke sini.

113
00:05:05,580 --> 00:05:09,610
‫Oke, sekarang mari kita lanjutkan dan cepat mengimpor appError dan itu

114
00:05:10,870 --> 00:05:13,200
‫mirip dengan yang ini di sini,

115
00:05:13,200 --> 00:05:14,823
‫jadi mari kita duplikat.

116
00:05:17,990 --> 00:05:21,203
‫Oke, dan ini dia dengan huruf kapital A.

117
00:05:22,170 --> 00:05:24,210
‫Baiklah, selamat mencoba dan

118
00:05:24,210 --> 00:05:25,850
‫sekarang coba lagi

119
00:05:27,160 --> 00:05:31,450
‫dan sekarang memang tidak ditemukan tur dengan ID 404 itu.

120
00:05:31,450 --> 00:05:34,440
‫Sempurna, jadi persis seperti yang kami inginkan.

121
00:05:34,440 --> 00:05:37,170
‫Oh dan Anda juga melihat bahwa kami gagal di sini.

122
00:05:37,170 --> 00:05:40,980
‫Oke dan itu berasal dari atau kelas juga.

123
00:05:40,980 --> 00:05:44,270
‫Bagus, jadi itu berhasil dan saya sangat

124
00:05:44,270 --> 00:05:48,060
‫berharap sekarang Anda mengerti persis bagaimana semua penanganan

125
00:05:48,060 --> 00:05:50,370
‫kesalahan ini sekarang bekerja.

126
00:05:50,370 --> 00:05:53,300
‫Oke, jadi sekali lagi kami membuat kesalahan dan

127
00:05:53,300 --> 00:05:55,450
‫kami kemudian meneruskan kesalahan itu ke

128
00:05:55,450 --> 00:05:57,820
‫berikutnya dan segera setelah menerima sesuatu, itu

129
00:05:57,820 --> 00:05:59,880
‫mengasumsikan bahwa itu adalah kesalahan

130
00:05:59,880 --> 00:06:00,757
‫dan itu

131
00:06:00,757 --> 00:06:03,630
‫akan langsung melompat ke middleware penanganan kesalahan global

132
00:06:03,630 --> 00:06:06,683
‫yang kemudian akan mengirimkan respons untuk kami , baik?

133
00:06:08,210 --> 00:06:09,850
‫Jadi, mari salin

134
00:06:09,850 --> 00:06:12,410
‫yang ini dan letakkan di semua

135
00:06:12,410 --> 00:06:15,600
‫penangan lain yang meminta dokumen berdasarkan ID.

136
00:06:15,600 --> 00:06:20,470
‫Jadi, bukan buat tur tapi perbarui tur, oke?

137
00:06:20,470 --> 00:06:21,380
‫Jadi, di

138
00:06:21,380 --> 00:06:23,120
‫sini sama, jika kami mencoba memperbarui

139
00:06:23,120 --> 00:06:24,360
‫tur yang tidak ada,

140
00:06:24,360 --> 00:06:26,773
‫itu akan memberi kami kesalahan yang sama persis.

141
00:06:29,210 --> 00:06:32,470
‫Akhirnya tentu saja sama dengan menghapus.

142
00:06:32,470 --> 00:06:35,870
‫Dan sekarang Anda melihat bahwa ESLint memberi saya kesalahan ini di

143
00:06:35,870 --> 00:06:38,710
‫sini dan begitu, itu karena tur ini tidak ditentukan

144
00:06:38,710 --> 00:06:41,730
‫dan dalam hal ini, ESLint benar-benar menyelamatkan saya di

145
00:06:41,730 --> 00:06:43,660
‫sini dari membuat bug ini.

146
00:06:43,660 --> 00:06:44,550
‫Benar?

147
00:06:44,550 --> 00:06:46,790
‫Jadi, sekali lagi tanpa ESLint, saya

148
00:06:46,790 --> 00:06:48,570
‫mungkin hanya menempelkannya di sini

149
00:06:48,570 --> 00:06:49,920
‫dan menyebutnya sehari

150
00:06:49,920 --> 00:06:53,050
‫tanpa menyadari bahwa tur tidak ditentukan di mana pun

151
00:06:53,050 --> 00:06:54,600
‫di dalam fungsi ini,

152
00:06:54,600 --> 00:06:57,830
‫tetapi karena kami memasang alat yang sangat berharga ini,

153
00:06:57,830 --> 00:06:59,970
‫sekarang saya dapat melanjutkan dan memperbaikinya.

154
00:06:59,970 --> 00:07:01,820
‫Baiklah, jadi sampai

155
00:07:01,820 --> 00:07:06,490
‫saat ini, kami hanya menunggu instruksi penghapusan ini di sini dan

156
00:07:06,490 --> 00:07:08,460
‫tidak menyimpan hasilnya dan itu

157
00:07:08,460 --> 00:07:10,710
‫hanya karena kami tidak membutuhkannya.

158
00:07:10,710 --> 00:07:13,200
‫Oke, tapi saat ini kami benar-benar membutuhkannya

159
00:07:13,200 --> 00:07:15,140
‫karena kami ingin variabel tur

160
00:07:15,140 --> 00:07:18,413
‫ini untuk memverifikasi apakah memang ada tur atau tidak.

161
00:07:21,460 --> 00:07:23,760
‫Jadi, sangat mudah, const tour dan kemudian

162
00:07:23,760 --> 00:07:25,350
‫sama dengan hasil itu,

163
00:07:25,350 --> 00:07:27,450
‫berikan save dan kemudian kesalahannya hilang.

164
00:07:28,610 --> 00:07:29,820
‫Sangat bagus.

165
00:07:29,820 --> 00:07:32,770
‫ESLint di tempat kerja, oke?

166
00:07:32,770 --> 00:07:37,770
‫Sekarang mungkin Anda memperhatikan bahwa saya tidak menambahkan kesalahan 404 ini

167
00:07:37,950 --> 00:07:40,000
‫di penangan getAllTour ini.

168
00:07:40,000 --> 00:07:41,910
‫Jadi, mengapa saya melakukan itu?

169
00:07:41,910 --> 00:07:43,620
‫Jadi izinkan saya menjelaskan alasannya.

170
00:07:43,620 --> 00:07:46,330
‫Jadi, ketika tidak ada hasil yang ditemukan,

171
00:07:46,330 --> 00:07:50,530
‫misalnya, tidak ada hasil yang cocok untuk filter, atau karena

172
00:07:50,530 --> 00:07:52,520
‫halaman yang diminta

173
00:07:52,520 --> 00:07:55,970
‫tidak ada, maka tentu saja kami dapat mempertimbangkan untuk

174
00:07:55,970 --> 00:07:58,550
‫mengirimkan kesalahan 404 dan mengatakan bahwa

175
00:07:58,550 --> 00:08:01,220
‫data tersebut tidak ada. ditemukan tetapi menurut

176
00:08:01,220 --> 00:08:03,760
‫pendapat saya dan juga pendapat pengembang

177
00:08:03,760 --> 00:08:07,170
‫lain, itu tidak sepenuhnya benar dalam permintaan ini

178
00:08:07,170 --> 00:08:09,240
‫karena sebenarnya tidak ada kesalahan.

179
00:08:09,240 --> 00:08:11,950
‫Maksudku, permintaan itu diterima dengan benar.

180
00:08:11,950 --> 00:08:14,550
‫Basis data dengan benar mencari tur dan

181
00:08:14,550 --> 00:08:16,950
‫menemukan persis nol catatan, jadi, nol

182
00:08:16,950 --> 00:08:19,150
‫catatan ini persis seperti

183
00:08:19,150 --> 00:08:23,250
‫yang akan kami kirim kembali bersama dengan 200 kode HTTP.

184
00:08:23,250 --> 00:08:25,120
‫Baiklah, sekali lagi saya menganggap

185
00:08:25,120 --> 00:08:27,300
‫bahwa tidak mungkin ada kesalahan ketika

186
00:08:27,300 --> 00:08:29,610
‫pengguna meminta semua tur kecuali tentu

187
00:08:29,610 --> 00:08:32,680
‫saja ada beberapa kegagalan dalam database atau sesuatu

188
00:08:32,680 --> 00:08:33,850
‫seperti itu.

189
00:08:33,850 --> 00:08:35,210
‫Tetapi dalam hal

190
00:08:35,210 --> 00:08:37,600
‫ini, Mongoose akan secara otomatis membuat kesalahan.

191
00:08:37,600 --> 00:08:40,950
‫Benar, yang kemudian akan ditangkap oleh fungsi atau catchAsync

192
00:08:40,950 --> 00:08:42,920
‫kami dan seperti yang sudah

193
00:08:42,920 --> 00:08:44,330
‫Anda ketahui, ditangani

194
00:08:44,330 --> 00:08:47,510
‫di penangan kesalahan global kami dan seperti yang

195
00:08:47,510 --> 00:08:48,800
‫sudah Anda

196
00:08:48,800 --> 00:08:52,000
‫ketahui, ditangani di middleware penanganan kesalahan global kami.

197
00:08:52,000 --> 00:08:55,640
‫Baiklah, jadi saya sudah mengucapkan kata-kata ini berkali-kali sekarang.

198
00:08:55,640 --> 00:08:57,717
‫Bagaimanapun, saya harap itu

199
00:08:57,717 --> 00:09:01,113
‫masuk akal dan, ya, mari kita lanjutkan.

