2015-11-13 3 views
2

Привет, я пытаюсь подключить Node.js к Facebook. Я следую this записи в блоге. Может кто-нибудь мне помочь?ValidationError: Ошибка проверки mongoose

Я получаю эту ошибку:

ValidationError: Validation failed at model.Document.invalidate (/Users/me/node_modules/mongoose/lib/document.js:1009:32) at /Users/me/node_modules/mongoose/lib/document.js:958:16 at validate (/Users/me/node_modules/mongoose/lib/schematype.js:610:7) at /Users/me/node_modules/mongoose/lib/schematype.js:627:9 at Array.forEach (native) at SchemaString.SchemaType.doValidate (/Users/me/node_modules/mongoose/lib/schematype.js:614:19) at /Users/me/node_modules/mongoose/lib/document.js:956:9 at doNTCallback0 (node.js:419:9) at process._tickCallback (node.js:348:13)

var FacebookStrategy = require('passport-facebook').Strategy; 
    var BearerStrategy = require('passport-http-bearer').Strategy; 
    var passport = require('passport'); 
    var mongoose = require('mongoose'); 
    var ObjectId = require('mongoose').Types.ObjectId; 

    // Mongoose connection to MongoDB (ted/ted is readonly) 
    mongoose.connect('mongodb://localhost/testDB', function(error) { 
     if (error) { 
      console.log(error); 
     } 
    }); 

    var userSchema = new Schema({ 
     facebookId: String, 
     access_token: { 
       type: String 
      }, 
     profileImage : String, 
     email : { 
      type : String, 

      unique : true 
     }, 
     password : { 
      type : String, 

     }, 
     created_at : Date, 
     updated_at : Date 
    }); 


     userSchema.statics.findOrCreate = function(filters, cb) { 
      User = this; 
      this.find(filters, function(err, results) { 
       if(results.length == 0) { 
        var newUser = new User(); 
        newUser.facebookId = filters.facebookId; 
        newUser.save(function(err, doc) { 
         cb(err, doc); 
        }); 
       } else { 
        cb(err, results[0]); 
       } 
      }); 
     }; 

    //facebook auth setup 
     options = { 
      clientID: 'FB_ID', 
    clientSecret: 'FB_SecretKey', 
    callbackURL: 'http://localhost:3000/auth/facebook/callback' 

     }; 
    passport.use(
      new FacebookStrategy(
       options, 
       function(accessToken, refreshToken, profile, done) { 
        User.findOrCreate(
         { facebookId: profile.id }, 
         function (err, result) { 
          if(result) { 
           result.access_token = accessToken; 
           result.save(function(err, doc) { 
            done(err, doc); 
           }); 
          } else { 
           done(err, result); 
          } 
         } 
        ); 
       } 
      ) 
     ); 

     app.get(
      '/auth/facebook', 
      passport.authenticate('facebook', { session: false, scope: [] }) 
     ); 

     app.get('/auth/facebook/callback', 
      passport.authenticate('facebook', { session: false, failureRedirect: "/" }), 
      function(req, res) { 
       res.redirect("/"); 
      } 
     ); 

     //token auth setup 
     passport.use(
      new BearerStrategy(
       function(token, done) { 
        User.findOne({ access_token: token }, 
         function(err, user) { 
          if(err) { 
           return done(err); 
          } 
          if(!user) { 
           return done(null, false); 
          } 

          return done(null, user, { scope: 'all' }); 
         } 
        ); 
       } 
      ) 
     ); 

package.json

{ 
    "name": "testapp", 
    "version": "0.0.0", 
    "description" : "Something" 

    "engines": { 
    "node": "4.2.x", 
    "npm": "3.3.x", 
    }, 
    "dependencies": { 
    "body-parser": "~1.12.0", 
    "cookie-parser": "~1.3.4", 
    "debug": "~2.1.1", 
    "express": "~4.12.2", 
    "fs-extra": "^0.18.4", 
    "jade": "~1.9.2", 
    "jsonwebtoken": "5.0.4", 
    "morgan": "~1.5.1", 
    "multer": "^1.0.3", 
    "serve-favicon": "~2.2.0" 
    } 
} 

Теперь я изменил необходимые поля, и я не получаю сообщение об ошибке.

+0

Вы запустили сервер оболочки MongoDB? –

+0

да я сделал. В противном случае я получаю исключение, которое я имплантировал. – Tony

+0

Когда вы получаете 'Validation failed', это означает, что вы пытаетесь сохранить что-то, что не соответствует вашей схеме. Единственное место, где вы сохраняете что-либо (в этом коде), - это 'profile.id' в стратегии Facebook. Вероятно, это не строка. – cdbajorin

ответ

0
password : { 
     type : String, // <-- no 

    } 

, что может быть причины

+0

Я думаю, что это приведет к синтаксической ошибке, а не к ошибке проверки достоверности OP. –