Tengo una expresión regular definida en mi enrutador express para averiguar si la UA es móvil o no, y dependiendo de si lo es o no, mostrar una página diferente.
Después de probarlo en nuestro sitio de producción, tiene una tasa de falla del 25% - 50%.
Me gustaría saber la causa raíz y una solución.
Gracias.
Índice.js
const moment = require('moment'); var _ = require('lodash'); var mobileRegex = new RegExp(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i, 'ig'); ...... ..... ..... router.get('/', function(req, res, next) { if (mobileRegex.test(req.headers['user-agent']) == true) { console.log('User-Agent: ' + req.headers['user-agent']); res.render('index-mobile') } else { res.render('index'); } }); router.get('/([\*])', function(req,res, next) { //Escaping * because cloudflare page rules aren't built right res.redirect('/') }); etc...Supongo que por "fallo" quiere decir que los dispositivos móviles no se detectan.
El olfateo del navegador no es particularmente confiable. Podría intentar usar algo como WhichBrowser pero tendría que mantenerlo actualizado. Los propios Mozilla recomiendan simplemente probar la cadena del agente de usuario para "Mobi", por lo que es posible que vea una tasa de falla menor al hacer eso.