Saya menggunakan express + node.js dan saya memiliki objek req, permintaan di browser adalah / akun tetapi ketika saya login req.path saya mendapatkan '/' --- bukan '/ akun'.
//auth required or redirect
app.use('/account', function(req, res, next) {
console.log(req.path);
if ( !req.session.user ) {
res.redirect('/login?ref='+req.path);
} else {
next();
}
});
req.path adalah / kapan seharusnya / akun ??
javascript
node.js
express
kenyal
sumber
sumber
TypeError: Cannot read property 'path' of undefined
req.route
tidak terdefinisi. Saya menggunakan express 3.4.4. Apa yang bisa menyebabkan rute menjadi tidak terdefinisi?Jawaban:
Setelah bermain sendiri, Anda harus menggunakan:
console.log(req.originalUrl)
sumber
const path = req.originalUrl.replace(/\?.*$/, '');
Dalam beberapa kasus, Anda harus menggunakan:
Ini memberi Anda jalan, alih-alih URL yang diminta lengkap. Misalnya, jika Anda hanya tertarik pada halaman mana yang diminta pengguna dan tidak semua jenis parameter, url:
req.path akan memberi Anda:
sumber
/demo
juga berpotensi memeriksa/demo/
).req.path
adalah singkatan dariurl.parse(req.url).pathname
dan ini harus menjadi jawaban yang diterimareq.path
memberi Anda jalur relatif ke tempat aplikasi Anda dipasang. Jika dipasang di root daripada ini benar, tetapi untuk jalur/my/path
, di dalam aplikasi yang dipasang di/my
,req.url
akan memberikan/path
.Untuk melengkapi, berikut adalah contoh yang diperluas dari dokumentasi, yang dengan baik membungkus semua yang perlu Anda ketahui tentang mengakses jalur / URL dalam semua kasus dengan ekspres:
Berdasarkan: https://expressjs.com/en/api.html#req.originalUrl
Kesimpulan: Seperti yang dinyatakan oleh jawaban c1moore di atas, gunakan:
sumber
Harus:
req.url
mengekspresikan 3.1.x
sumber
Alasan untuk ini adalah bahwa Express mengurangi path tempat fungsi handler Anda dipasang, yang
'/account'
dalam hal ini.Mengapa mereka melakukan ini?
Karena itu membuatnya lebih mudah untuk menggunakan kembali fungsi handler. Anda dapat membuat fungsi penangan yang melakukan hal-hal yang berbeda untuk
req.path === '/'
danreq.path === '/goodbye'
misalnya:Kemudian Anda bisa memasangnya ke beberapa titik akhir:
Memberi:
sumber
Jika Anda ingin benar-benar hanya mendapatkan "path" tanpa querystring, Anda dapat menggunakan
url
library untuk menguraikan dan mendapatkan hanya path bagian dari url.sumber
req.query.ref
jika login berhasilreq.path
hanyalah alias untukurl.parse(req.url).pathname
Untuk versi 4.x Anda sekarang dapat menggunakan
req.baseUrl
selainreq.path
untuk mendapatkan path lengkap. Misalnya, OP sekarang akan melakukan sesuatu seperti:sumber
setelah mengeksekusi saya melihat yang berikut di konsol dan saya mendapatkan hasil yang sempurna di browser saya.
sumber