Javascript User.findOne()不是函数

Javascript User.findOne()不是函数,javascript,node.js,Javascript,Node.js,上面的代码在使用passport js身份验证的节点js中,本地注册代码不起作用 在上面的代码中,我得到了错误: User.findOne()不是函数 我的模式是正确的。。。请帮助您需要(如果您还没有)使用模型创建数据实例,如 passport.use('local-signup', new LocalStrategy({ // by default, local strategy uses username and password, we will override with ema

上面的代码在使用passport js身份验证的节点js中,本地注册代码不起作用

在上面的代码中,我得到了错误:

User.findOne()不是函数

我的模式是正确的。。。请帮助

您需要(如果您还没有)使用
模型创建数据实例,如

passport.use('local-signup', new LocalStrategy({
    // by default, local strategy uses username and password, we will override with email
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true // allows us to pass back the entire request to the callback
},
(req, email, password, done) => {
    // asynchronous
    // User.findOne wont fire unless data is sent back
    process.nextTick(() => {

    // find a user whose email is the same as the forms email
    // we are checking to see if the user trying to login already exists
    User.findOne({ 'email' :  email },function(err, user){
        // if there are any errors, return the error

        if (err)
            return done(err);

        // check to see if theres already a user with that email
        if (user) {
            return done(null, false, {'errorMessages': 'That email is already taken.'});
        } else {

            // if there is no user with that email
            // create the user
            let newUser            = new User();

            // set the user's local credentials
            newUser.name       = req.body.fullname;
            //newUser.email          = email;
            newUser.password       = newUser.generateHash(password);


            // save the user
            newUser.save((err)=>{
                if (err)
                    return done(err);
                return done(null, newUser);
            });
        }
    });    
    });
}));
现在您应该可以在这里使用
.findOne

并确保在一个集合中为日期定义结构,如

var UserDetails = mongoose.model('userInfo', UserDetail);

我也遇到过这样的情况:

 var Schema = mongoose.Schema;
 var UserDetail = new Schema({
  username: String,
  password: String
}, {
  collection: 'userInfo'
});
返回“findOne不是函数”

但通过改为:

const User = require('../../mongoose/User');
User.findOne(...);
…成功了。
希望我帮助了别人

可能您没有从用户模型文件夹导出模型。 如:
module.exports=User=mongoose.model(“用户”,UserSchema)

请使用下面的代码

var User = require('../../mongoose/User');
User.findOne(...);
User应该是模型名,记住在顶部定义const
UserSchema=newschema
,以便在MongoDB和

用户应该知道您所在的路线

module.exports = User = mongoose.model('user', UserSchema)

这样,您就可以将mongoose模式导出到route用户,这将使
findOne
被视为mongoose函数。

从名为user.js的文件中从模型目录导出用户模型。

router.post('/user') (req, res) => { code here }
然后从任何其他加载用户模型

module.exports.User = User

注意:我假设用户模型文件名为user.js

在我的例子中,我这样定义用户↓

const {User} = require('../models/user.js');
而不是↓

const User = '../../models/User'
使用

而不是

module.exports = User = mongoose.model("users", UserSchema);
import User from '../db/models/user';

这是导出和导入模型的方式。如果您将模型定义为
constuser=mongoose.model(“用户”,UserSchema)
然后通过
导出默认用户导出。您应使用以下命令导入该文件:

module.exports = User => mongoose.model("users", UserSchema);
而不是

module.exports = User = mongoose.model("users", UserSchema);
import User from '../db/models/user';
  • User.findOne不是函数错误

    就我而言:

  • 正确语法: const User=require('../../models/User')//已纠正

  • 由于VS代码自动格式化,我的导入更改为以下格式,因此发生错误

    const User=require-'../../models/User' :-虽然此导入是罪魁祸首,但VS代码仍然验证了此导入

  • 您可以尝试以下方法:

    const User = require('../db/models/user');
    

    我们应该如何知道用户是什么?为什么-1?请给出一个解释,说明原因。你能给我举一个关于postgresql的kexjs的例子吗?我遇到了相同的错误用户。findone不是一个函数,我不知道从哪里开始寻找这个问题抱歉@Sasharonov。我不知道如何在postgresql上获取它。但是请确保您正在使用
    获取模型。findOne
    这意味着您不是将用户定义为模型,而是将其定义为字符串,不是吗?