Из-за чего-то в моей экспресс-маршрутизации данные, кажется, отправляются дважды в интерфейс Angular. Похоже, что Mixpanel отправляется в бесконечный цикл, который заставляет части приложения не загружаться должным образом.
Причиной для следующего кода является то, что я хочу обнаружить определенные пользовательские агенты и отправить им что-то иное, чем обычный пользователь видит. Это связано с тем, что некоторые пользовательские агенты не загружают Javascript, но мне нужно, чтобы они очищали некоторую информацию со страницы.
Из моего server.js:
app = express();
app
.use( morgan( 'dev' ) )
.use(bodyParser.urlencoded( { limit: '50mb', extended: true } ) )
.use( bodyParser.json( { limit: '50mb' } ) )
.use( '/api', require('./routes/usersRoute.js') )
.use( express.static( indexPath ) )
.all( '/*', require( './routes/home.js' ) )
Из моего home.js:
router.get( '/:user/:stream/:slug', function( req, res, next ) {
if ( req.headers['user-agent'].indexOf( 'facebook' ) != -1 ) {
if ( !req.params.user && !req.params.stream && !req.params.slug ) return next()
contentController.findUserId( req.params.user )
.then( function ( userId ) {
if ( !userId ) return next()
contentController.projectContent( req.params.slug )
.then( function ( item ) {
if ( !item ) return next()
createOpenGraph( item[0] )
.then( function ( OG ) {
return res.status( 200 ).send( OG )
})
.catch( function ( error ) {
console.log( error )
return res.status( 500 ).json( error )
})
})
})
} else {
return res.status( 200 )
.set( { 'content-type': 'text/html; charset=utf-8' } )
.sendFile( indexPath )
}
})
router.get( '/*', function( req, res ) {
return res.status( 200 )
.set( { 'content-type': 'text/html; charset=utf-8' } )
.sendFile( indexPath )
})
Несколько страниц кажутся разбитыми, и я не уверен, почему некоторые страницы ломаются, но не другие. Примечательно, что страница, которую я пытаюсь обнаружить в функции .get( '/:user/:stream/:slug'...)
в home.js
. На этой странице в консоли я вижу ошибку, которую угловой загружал дважды, что подтверждает, что Mixpanel ломается из-за проблемы с двойным ответом. Эта ошибка не появляется на страницах, которые не сломаются. Более того, я вижу, что обе функции (в home.js
) home.js
каждый раз, когда я загружаю сломанную страницу, но не рабочие.
Я открыт для всех советов о том, как это сделать лучше.
Вы определили маршруты в файле routes/home.js
для вызова до любого другого соответствующего маршрута. Поэтому вам необходимо передать управление следующему маршруту, выполняя следующий параметр. Возможно, вы хотите отправить файл на другой маршрут, возможно, на .use( '/app', require('./routes/appRoutes.js') )
или на последний метод, как на примере.
router.get( '/:user/:stream/:slug', function( req, res, next ) {
if ( req.headers['user-agent'].indexOf( 'facebook' ) != -1 ) {
/*Do the facebook stuff*/
} else {
res.status( 200 );
}
next();
});
//routes/appRoutes.js
router.get( '/*', function( req, res, next ) {
return res.status( 200 )
/*Set you headers independently on the api routes as you might prefer to set the content type to application/json*/
.set( { 'content-type': 'text/html; charset=utf-8' } )
.sendFile(indexPath ).end();
});
//server.js
app = express();
app.use( morgan( 'dev' ) )
.use(bodyParser.urlencoded( { limit: '50mb', extended: true } ) )
.use( bodyParser.json( { limit: '50mb' } ) )
.use( '/api', require('./routes/usersRoute.js') )
.use( '/app', require('./routes/appRoutes.js') )
.use( express.static( indexPath ) )
.all( '/*', require( './routes/home.js' ) );