Memperbaiki 404 tersembunyi

Aplikasi Web Satu Halaman dapat menampilkan konten yang berbeda tanpa memuat halaman baru. Untuk melakukannya, mereka menggunakan pengendali klik pada link dan History API. History API memungkinkan manipulasi histori sesi browser. Dengan cara ini, kita dapat memperbarui URL saat menampilkan halaman yang berbeda (biasanya disebut "tampilan" di Aplikasi Web Satu Halaman). Tindakan ini juga memastikan tombol kembali di browser masih berfungsi seperti yang diharapkan.

Lihat Aplikasi Web Satu Halaman di codelab ini. Menampilkan gambar kucing atau dan menyediakan link untuk beralih antara kedua hewan. Sepertinya berfungsi dengan baik.

Mengungkap 404 yang licik

Sayangnya, ada bug halus di aplikasi. Mari kita lihat.

  • Untuk melihat pratinjau situs, tekan Lihat Aplikasi. Kemudian tekan Layar Penuh layar penuh.
  • Klik link Doggos. Perhatikan bagaimana URL berubah.
  • Muat ulang aplikasi.

Anda mendapatkan halaman yang berisi "Cannot GET /doggos"—404 tersembunyi. Hal ini "licik", karena aplikasi web tampaknya berfungsi dengan baik selama Anda hanya mengklik link di dalamnya. URL akan rusak saat menggunakan URL di jendela browser baru atau saat memuat ulang halaman. Masalahnya adalah server tidak tahu cara merespons permintaan untuk URL ini. Kode JavaScript di aplikasi web kita menggunakan History API untuk menavigasi di antaranya, tetapi server tidak tahu apa yang harus dilakukan dengan URL tersebut. Setiap kali server tidak tahu apa yang harus dilakukan untuk URL yang diminta, server akan merespons dengan kode status HTTP 404. Dengan kode ini, server menyatakan bahwa server belum menemukan apa pun untuk URL yang diminta.

Dalam hal ini, mesin telusur tidak akan mengindeks URL karena pengguna akan mengklik hasil penelusuran dan menemukan pesan error, tetapi bukan konten yang mereka cari, seperti gambar anjing.

Memperbaiki server

Project ini menggunakan server express.js yang ditulis dalam JavaScript. Mari kita perbaiki server agar merespons dengan index.html dan aplikasi satu halaman akan menangani sisanya.

  • Klik Remix to Edit agar project dapat diedit.
  • Pilih file server.js.

File ini berisi kode server. Fungsi ini menyiapkan server express.js dan mengirim konten index.html. Penyiapan rute di baris 15 hanya menayangkan aplikasi web saat permintaan diarahkan ke URL /. Server juga harus menayangkan URL lain yang telah kita buat. Mari kita ubah ini untuk menayangkan semua URL, sehingga juga berfungsi dengan URL tambahan pada masa mendatang.

Untuk melakukannya, kita dapat mengubah kode mulai dari baris 15 menjadi ini:

app.get('/*', function(request, response) {
  response.sendFile(__dirname + '/views/index.html');
});

/* cocok dengan URL apa pun dan server kini merespons dengan aplikasi web di index.html untuk URL tertentu.

  • Untuk melihat pratinjau situs, tekan View App. Lalu, tekan Fullscreen layar penuh.

Memuat ulang dan membuka link di jendela samaran baru kini akan berfungsi seperti yang diharapkan.