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:产品验证失败:错误

如何修复“需要路径,验证错误”,猫鼬,节点

如何修复“需要路径,验证错误”,猫鼬,节点