-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path17c-pathparameter.js
executable file
·134 lines (119 loc) · 4.91 KB
/
17c-pathparameter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// ---Path parameter ---
// path atau routing bs dikatakan sbg alamatnya yg digunakan client utk melakukan permintaan ke server
// alamat atau path yang dibuat biasanya merupakan teks verbal yang dapat dimengerti oleh client
// tak jarang hanya dengan membaca path dari sebuah tautan kita langsung mengerti apa yang cliemt minta ke server
// sebagai conto kita membaca https://github.com/dicodingacademy. dapat kita baca habwa cliem meminta server utk menampilkan profil github dengan username dicodingacademy
// contoh lain, dari alamat https://twitter.com/maudyayunda yaitu client meminta server utk akses profil twitter maudy
// twitter dan github menggunakan pendekatan yang sama dalam menampilkan profil halaman
// mereka memanfaatkan username sbg bagian dari path utk melakukan permintaan ke server
// jika mereka memiliki banyak pengguna yang banyak, apakah mereka menetapkan route scara satu per satu berdasarkan username utk setiap penggunanya ?
// tentu saja tidak
// utk melakukan hal tsb, twitter dan github menggunakan teknik path parameter, di Hapi framework teknik tsb sangat mudah utk diterapkan. cukup dg membungkus path dengan tanda {}
// sbg contoh:
/** -- contoh penerapan path parameter dg Hapi:
*
* server.route({
* method: 'GET',
* path: '/users/{username}',
* handler: (request,h)=>{
* const {username}=request.params;
* return `Hello, ${username}!`;
* },
* });
*/
// kode diatas terdapat properti path pada bagian path yang ditulis {username}
// itu berarti, server memberikan bagian teks tsb utk client manfaatkan sebagai parameter
// nantinya parameter ini akan disimpan sbg properti pada request.params yang memiliki handler dengan
// nama sesuai yang anda tetapkan. bila anda melakukan permintaan ke server dengan alamat '/users/harry' maka server akan menanggapi dengan 'helo, harry!'
// pada contoh kode diatas,nilai path parameter wajib diisi oleh client. bila client mengabaikannya dengan
// melakukan permintaan pada alamat '/users' mka server akan mengalami eror
// pada Hapi, anda dapat membuat path parameter bersifat opsional. caranya dengan menambahkan tanda '?' di akhir nama parameter.
// berikut contoh yang sama namun dengan implementasi opsional path parameter
/** -- mplementasi opsional param Hapi
* server.route({
method: 'GET',
path: '/users/{username?}',
handler: (request, h) => {
const { username = 'stranger' } = request.params;
return `Hello, ${username}!`;
},
});
*
*/
// sekarang bila client meminta pada alamat '/users/dicoding', server menanggapi dengan 'helo, dicoding!' dan
// bila client meminta hanya pada path '/users' server akan menanggapi dengan 'helo, strangers!'
// anda bs menetapkan lebih dari satu path parameter, namun perlu diketahui bahwa optional path param hanya dapat digunakan di akhir bagian path saja.
// jika anda menetapkan optional path di tengah-tengah path parameter lain contohnya /{one?}/{two},
// maka path ini dianggap tidak valid oleh Hapi
// --Latihan Path parameter
// pada latihan ini, kita buat route baru dg nilai path /hello/{name?}
// jika client melampirkan nilai path parameter, server harus mengembalikan dg pesan "helo, name!"
// namun jika tidak, server harus mengembalikan dg nilai "helo, stranger!"
// buka berkas route.js dan isikan kode berikut:
/** route.js
*
* const routes = [
{
method: 'GET',
path: '/',
handler: (request, h) => {
return 'Homepage';
},
},
{
method: '*',
path: '/',
handler: (request, h) => {
return 'Halaman tidak dapat diakses dengan method tersebut';
},
},
{
method: 'GET',
path: '/about',
handler: (request, h) => {
return 'About page';
},
},
{
method: '*',
path: '/about',
handler: (request, h) => {
return 'Halaman tidak dapat diakses dengan method';
},
},
{
method: 'GET',
path: '/hello/{name?}',
handler: (request, h) => {
}
},
{
method: '*',
path: '/{any*}',
handler: (request, h) => {
return 'Halaman tidak ditemukan';
},
},
];
module.exports = routes;
*/
// di dalam handler, dapatkan nilai path param melalui properti request.params
// kita manfaatkan objek destruct utk mendapatkan nilainya. isikan juga nilai default "stranger"
// lalu return fungsi handler dengan pesan sesuai ketentuan shg tampak seperti berikut:
/**
* {
method: 'GET',
path: '/hello/{name?}',
handler: (request, h) => {
const { name = "stranger" } = request.params;
return `Hello, ${name}!`;
},
},
*
*/
// simpan perubahan pada router.js lalu jalankan server
// lakukan permintaan lewat curl atau browser pada path /hello/dicoding atau /hello
//curl -X GET http://localhost:5000/hello/dicoding
// output: Hello, dicoding!
//curl -X GET http://localhost:5000/hello
// output: Hello, stranger!