При использовании passjs с nodejs, я получаю ошибку 504 при попытке вставить в базу данных.Ошибка 504 при вставке в базу данных монго
База данных mongo размещена снаружи с сервера приложений, и приложение находится за обратным прокси (обратный прокси преобразует порт приложения в порт 80).
Проблема происходит только при попытке вставить в Монго документа:
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 в качестве аргументов для извлечения вывода, но безрезультатно.
Он также не вставляет документ/элемент в странный db.
504 - тайм-аут шлюза. Является ли ваш прокси-сервер непреднамеренно пытается перенаправить ваш порт монго? Можете ли вы выполнить ping сервер mongo с сервера приложений? – ppovoski
Сервер mongo размещен на mlab, а запрос на сервер mongo выполняется на сервере приложений. Я не понимаю, как это можно сделать. Я думаю, я мог бы попробовать получить доступ к нему напрямую, но моя настройка будет за другим обратным прокси-сервером, так как я использую cloudflare. – Jacob