Node Express дает два ответа, ломает интерфейсный скрипт

0

Из-за чего-то в моей экспресс-маршрутизации данные, кажется, отправляются дважды в интерфейс 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 каждый раз, когда я загружаю сломанную страницу, но не рабочие.

Я открыт для всех советов о том, как это сделать лучше.

  • 0
    Возможно, покажите какой-нибудь код в разделе «делай фейсбук».
  • 0
    @ralh Я добавил это. Я не думал, что проблема возникла оттуда, но на второй взгляд, возможно, это так.
Теги:
express

1 ответ

1

Вы определили маршруты в файле 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' ) );
  • 0
    Интересно, что в некоторых случаях это решает проблему, но на других страницах написано, что не удается прочитать свойство 'end' из undefined, и если я добавлю его на оба, то ни одна страница не будет работать.
  • 0
    Можете ли вы привести пример URL, который не работает?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню