当使用带有nodejs的passportjs时,尝试插入数据库时出现504错误。
mongo数据库由应用程序服务器外部托管,应用程序位于反向代理后面(反向代理将应用程序端口转换为端口80)。
只有在尝试插入mongo文档时才会出现此问题:
passport.use(new GoogleStrategy({
clientID: "client_id",
clientSecret: "client_secret",
callbackURL: "oauth_url_callback"
},
function(accessToken, refreshToken, profile, done) {
passport.serializeUser(function(user,done){
mongo.connect(url, function(err,db){
if(err){
console.log(err, ' was the err');
fs.open('views/debug/debug.txt', 'rw', 'a+', function(err,data){
fs.writeFileSync('views/debug/debug.txt', err);
});
done(err);
} else {
db.collection('users').find({profile:profile}, function(err, user) {
if (err) {
fs.open('views/debug/debug.txt', 'rw', 'a+', function(err,data){
fs.writeFileSync('views/debug/debug.txt', err);
});
db.collection('users').insertOne({profile:profile, name:"John Doe"}, function(err, user){
if(err){
console.log("failed to insert", err);
} else {
console.log('Registered a new user!');
}
});
} else {
console.log('We have a returning user!');
}
console.log('testing');
fs.open('views/debug/debug.txt', 'rw', 'a+', function(err,data){
fs.writeFileSync('views/debug/debug.txt', err);
});
done(null, user);
});
}
});
});
}
));
我不确定为什么会发生这种情况,但只有在您尝试插入数据库时才会发生。当我刷新页面时,它没有504,因为它返回一个错误,表示令牌已经过期。
我也尝试记录错误,似乎没有错误。我用stdout和stderror作为提取输出的参数开始这个过程但是没有用。
它也没有将文档/项插入到奇怪的数据库中。
答案 0 :(得分:0)
事实证明我在两个回调中都重载了完成函数两次。我分别定义了每个并分别调用它们。