gpt4 book ai didi

javascript - Node Express 给出两个响应,破坏前端脚本

转载 作者:行者123 更新时间:2023-12-03 09:12:25 24 4
gpt4 key购买 nike

由于我的 Express 路由中的某些问题,数据似乎被发送到 Angular 前端两次。这似乎使 Mixpanel 进入无限循环,导致应用程序的某些部分无法正确加载。

以下代码的原因是我想检测某些用户代理并向他们发送普通用户所看到的内容之外的内容。这是因为某些用户代理不会加载 Javascript,但我需要它们从页面中抓取一些信息。

来 self 的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' ) )

来 self 的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 )
})

有几页似乎损坏了,我不确定为什么有些页面坏了,而另一些则没有。值得注意的是,我尝试在 home.js 中的 .get( '/:user/:stream/:slug'...) 函数中检测的页面中断了。在该页面的控制台中,我可以看到 Angular 加载了两次的错误,这证实了 Mixpanel 由于双重响应问题而中断。此错误不会出现在未损坏的页面上。此外,我可以看到每次我在损坏的页面上加载时都会调用这两个函数(在 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' ) );

关于javascript - Node Express 给出两个响应,破坏前端脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32044247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com