2016-12-11 2 views
0

При использовании 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.

+1

504 - тайм-аут шлюза. Является ли ваш прокси-сервер непреднамеренно пытается перенаправить ваш порт монго? Можете ли вы выполнить ping сервер mongo с сервера приложений? – ppovoski

+0

Сервер mongo размещен на mlab, а запрос на сервер mongo выполняется на сервере приложений. Я не понимаю, как это можно сделать. Я думаю, я мог бы попробовать получить доступ к нему напрямую, но моя настройка будет за другим обратным прокси-сервером, так как я использую cloudflare. – Jacob

ответ

0

Оказывается, я перегружал выполняемую функцию, определяя ее дважды в обоих обратных вызовах. Я определял их отдельно и называл их отдельно.