Estou usando express + node.js e tenho um objeto req, a solicitação no navegador é / account, mas quando eu registro req.path, recebo '/' --- not '/ account'.
//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 é / quando deveria ser / conta ??
javascript
node.js
express
chovy
fonte
fonte
TypeError: Cannot read property 'path' of undefined
req.route
está indefinido. Estou usando express 3.4.4. O que pode fazer com que a rota seja indefinida?Respostas:
Depois de me divertir um pouco, você deve usar:
console.log(req.originalUrl)
fonte
const path = req.originalUrl.replace(/\?.*$/, '');
Em alguns casos, você deve usar:
Isso fornece o caminho, em vez do URL completo solicitado. Por exemplo, se você estiver interessado apenas em qual página o usuário solicitou e não em todos os tipos de parâmetros, o URL:
O req.path fornecerá:
fonte
/demo
também deve potencialmente verificar/demo/
).req.path
é a abreviação deurl.parse(req.url).pathname
e esta deve ser a resposta aceitareq.path
fornece o caminho relativo para onde seu aplicativo está montado. Se ele estiver montado na raiz, isso estará correto, mas para um caminho/my/path
, dentro de um aplicativo montado em/my
,req.url
será fornecido/path
.Para complementar, aqui está um exemplo expandido da documentação, que inclui tudo o que você precisa saber sobre como acessar os caminhos / URLs em todos os casos com express:
Com base em: https://expressjs.com/en/api.html#req.originalUrl
Conclusão: Como a resposta de c1moore afirma acima, use:
fonte
Deveria ser:
req.url
express 3.1.x
fonte
A razão para isso é que o Express subtrai o caminho em que sua função de manipulador está montada, o que é
'/account'
nesse caso.Porque é que eles fazem isto?
Porque facilita reutilizar a função de manipulador. Você pode fazer uma função do manipulador que faz coisas diferentes para
req.path === '/'
ereq.path === '/goodbye'
por exemplo:Em seguida, você pode montá-lo em vários pontos de extremidade:
Dando:
fonte
Se você realmente deseja obter apenas o "caminho" sem a string de consulta, pode usar a
url
biblioteca para analisar e obter apenas parte do caminho do URL.fonte
req.query.ref
se login bem-sucedidoreq.path
é apenas um apelido paraurl.parse(req.url).pathname
Para a versão 4.x, agora você pode usar o
req.baseUrl
alémreq.path
para obter o caminho completo. Por exemplo, o OP agora faria algo como:fonte
após a execução, vejo o seguinte no console e obtenho um resultado perfeito no meu navegador.
fonte