2017-04-04 21 views
1

我正在使用React Router和Passport.js來設置Facebook登錄。我已經設置了明確的路線和護照的配置,但每次我打我的客戶端的 <a href="/api/auth/facebook">鏈接,這讓因爲我的這條線明確的應用可以RR的請求:React Router截取到Express服務器的API調用

app.get('/*', function(req, res) { 
    res.sendFile(path.resolve(__dirname, '../client', 'build', 'index.html')) 
}); 

正如我我打電話給服務器端路由,它返回這個錯誤:

Warning: [react-router] Location "/api/auth/facebook" did not match any routes 

我怎樣才能繞過React路由器這一個特定的路線?

我user_routes.js文件看起來像:

'user strict'; 

var bodyparser = require('body-parser'); 
var User = require('../models/User.js'); 

module.exports = function loadUserRoutes(router, passport) { 
    router.use(bodyparser.json()); 

    router.get('/auth/facebook', passport.authenticate('facebook', { 
    session: false, 
    successRedirect: '/chat', 
    failureRedirect: '/' 
    })); 

    router.get('/auth/facebook/callback', passport.authenticate('facebook', { 
    session: false, 
    successRedirect: '/chat', 
    failureRedirect: '/' 
    })); 

    router.post('/sign_up', passport.authenticate('local-signup', { session: false}), function(req, res) { 
    res.json(req.user); 
    }); 

    router.post('/sign_in', passport.authenticate('local-login', { session: false}), function(req, res) { 
    res.json(req.user); 
    }); 

    router.get('/signout', function(req, res) { 
    req.logout(); 
    res.end(); 
    }); 

    //get auth credentials from server 
    router.get('/load_auth_into_state', function(req, res) { 
    res.json(req.user); 
    }); 

    // get usernames for validating whether a username is available 
    router.get('/all_usernames', function(req, res) { 
    User.find({'local.username': { $exists: true } }, {'local.username': 1, _id:0}, function(err, data) { 
     if(err) { 
     console.log(err); 
     return res.status(500).json({msg: 'internal server error'}); 
     } 
     res.json(data); 
    }); 
    }) 
}; 

回答

1

在表達路線在他們得到定義的順序匹配。

所以在你的/*路由之前,你需要一些東西來處理API請求。

app.get('/api/auth/facebook', passport.authenticate('facebook')) 

app.get('/*', function(req, res) { 
    res.sendFile(path.resolve(__dirname, '../client', 'build', 'index.html')) 
}); 
+0

我目前有: require('./ routes/user_routes')(usersRouter,passport); app.use('/ api',usersRouter); –

+0

嘗試了這一行,控制檯仍然返回相同的錯誤消息。 –

+0

從我能看到的數量有限。 'app.use('/ api',usersRouter);'沒有做你認爲正在做的事情。你可以通過瀏覽器訪問'/ api/auth/facebook'嗎?我懷疑是路線是_actually_'/ auth/facebook',所以抓住所有人都得到它。 – powerc9000

相關問題