Привет, я пытаюсь подключить 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"
}
}
Теперь я изменил необходимые поля, и я не получаю сообщение об ошибке.
Вы запустили сервер оболочки MongoDB? –
да я сделал. В противном случае я получаю исключение, которое я имплантировал. – Tony
Когда вы получаете 'Validation failed', это означает, что вы пытаетесь сохранить что-то, что не соответствует вашей схеме. Единственное место, где вы сохраняете что-либо (в этом коде), - это 'profile.id' в стратегии Facebook. Вероятно, это не строка. – cdbajorin