una ruta pert online hacer empresa ejemplo critica cpm como javascript node.js express

javascript - online - ruta critica pert



cómo obtener la ruta de solicitud con el objeto de solicitud urgente (8)

req.route.path funciona para mí

var pool = require(''../db''); module.exports.get_plants = function(req, res) { // to run a query we can acquire a client from the pool, // run a query on the client, and then return the client to the pool pool.connect(function(err, client, done) { if (err) { return console.error(''error fetching client from pool'', err); } client.query(''SELECT * FROM plants'', function(err, result) { //call `done()` to release the client back to the pool done(); if (err) { return console.error(''error running query'', err); } console.log(''A call to route: %s'', req.route.path + ''/nRequest type: '' + req.method.toLowerCase()); res.json(result); }); }); };

después de ejecutar veo lo siguiente en la consola y obtengo el resultado perfecto en mi navegador.

Express server listening on port 3000 in development mode A call to route: /plants Request type: get

Estoy usando express + node.js y tengo un objeto req, la solicitud en el navegador es / account pero cuando registro req.path obtengo ''/'' --- 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 es / ¿cuándo debería ser / account?


Debería ser:

req.url

express 3.1.x


Después de jugar un poco, deberías usar:

console.log(req.originalUrl)


En algunos casos debes usar:

req.path

Esto le proporciona la ruta, en lugar de la URL completa solicitada. Por ejemplo, si solo está interesado en qué página solicitó el usuario y no en todos los tipos de parámetros, la url:

/myurl.htm?allkinds&ofparameters=true

req.path te dará:

/myurl.html


Para la versión 4.x, ahora puede usar req.baseUrl además de req.path para obtener la ruta completa. Por ejemplo, el OP ahora haría algo como:

//auth required or redirect app.use(''/account'', function(req, res, next) { console.log(req.baseUrl + req.path); // => /account if(!req.session.user) { res.redirect(''/login?ref='' + encodeURIComponent(req.baseUrl + req.path)); // => /login?ref=%2Faccount } else { next(); } });


Si realmente desea obtener solo "ruta" sin querystring, puede usar la biblioteca de url para analizar y obtener solo la parte de ruta de la url.

var url = require(''url''); //auth required or redirect app.use(''/account'', function(req, res, next) { var path = url.parse(req.url).pathname; if ( !req.session.user ) { res.redirect(''/login?ref=''+path); } else { next(); } });


//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 es / ¿cuándo debería ser / account?

La razón para esto es que Express resta la ruta en la que está montada su función de controlador, que es ''/account'' en este caso.

¿Por qué hacen esto?

Porque hace que sea más fácil reutilizar la función del controlador. Puede hacer una función de controlador que hace cosas diferentes para req.path === ''/'' y req.path === ''/goodbye'' por ejemplo:

function sendGreeting(req, res, next) { res.send(req.path == ''/goodbye'' ? ''Farewell!'' : ''Hello there!'') }

Luego puede montarlo en múltiples puntos finales:

app.use(''/world'', sendGreeting) app.use(''/aliens'', sendGreeting)

Dando:

/world ==> Hello there! /world/goodbye ==> Farewell! /aliens ==> Hello there! /aliens/goodbye ==> Farewell!


res.redirect(req.header(''referrer''));

redirigirá a la dirección url actual.