ValidationError:验证失败猫鼬
Posted
技术标签:
【中文标题】ValidationError:验证失败猫鼬【英文标题】:ValidationError: Validation failed mongoose 【发布时间】:2016-02-14 21:56:33 【问题描述】:您好,我正在尝试将 Node.js 与 Facebook 连接起来。我正在关注this 博客条目。 有人能帮我吗?
我遇到了这个错误:
ValidationError:model.Document.invalidate 验证失败 (/Users/me/node_modules/mongoose/lib/document.js:1009:32)在 /Users/me/node_modules/mongoose/lib/document.js:958:16 在验证 (/Users/me/node_modules/mongoose/lib/schematype.js:610:7) 在 /Users/me/node_modules/mongoose/lib/schematype.js:627:9 在 SchemaString.SchemaType.doValidate 中的 Array.forEach(本机) (/Users/me/node_modules/mongoose/lib/schematype.js:614:19)在 /Users/me/node_modules/mongoose/lib/document.js:956:9 在 doNTCallback0 (node.js:419:9) 在 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 shell server 启动了吗? 是的,我做到了。否则我会得到一个我已经实现的异常。 当您收到Validation failed
时,这意味着您正在尝试保存与您的架构不匹配的内容。您保存任何内容的唯一位置(在此代码中)是 Facebook 策略中的profile.id
。它可能不是字符串。
是的,我得到一个这样的数字:10404282581118299。我在我的模式中将类型更改为 number 和 schmema.mixed 但它似乎是相同的验证问题。我还打印 profile.id 的类型 console.log(typeof(profile.id)+ "profileID");它是一个字符串。
哦,我明白了。您有电子邮件和密码作为必填字段,但您正在创建一个只有 profile.id
的新用户
【参考方案1】:
password :
type : String, // <-- no
这可能是一个原因
【讨论】:
我认为这会导致语法错误,而不是 OP 看到的验证失败错误。以上是关于ValidationError:验证失败猫鼬的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose ValidationError:验证失败:需要路径
错误:升级失败:错误验证“”:错误验证数据:ValidationError(Ingress.spec.rules[0].http):缺少必填字段“路径”
mongoose .create 给 node.js “ValidationError:验证失败:转换为 [undefined] 值失败......”
来自 RESTful API 的发布请求给出 UnhandledPromiseRejectionWarning:ValidationError:产品验证失败:错误