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);
});
}
});
});
}));
上面的代码在使用护照js身份验证的节点js中,并且local-signup的代码不起作用。
在上面的代码中我收到错误:
User.findOne() is not a function
。
我的架构没问题......请帮忙
答案 0 :(得分:4)
您需要(如果您还没有)使用model
var UserDetails = mongoose.model('userInfo', UserDetail);
现在你应该可以在这里使用.findOne
。
确保您在类似的集合中定义日期的结构。
var Schema = mongoose.Schema;
var UserDetail = new Schema({
username: String,
password: String
}, {
collection: 'userInfo'
});
答案 1 :(得分:1)
请使用下面的代码
module.exports = User = mongoose.model('user', UserSchema)
用户应为模型名称,并记得在顶部定义const UserSchema = new Schema
以便在MongoDB和
用户应该在拥有
的路线上router.post('/user') (req, res) => { code here }
与此相关,您正在将猫鼬模式导出到路由用户,这使findOne
被视为猫鼬功能。
答案 2 :(得分:1)
User.findOne 不是函数错误
就我而言:
正确的语法: const User = require('../../models/User') // 修正
由于 VS 代码自动格式化我的导入更改为下面而发生错误
const User = require - '../../models/User' :- 虽然这个导入是罪魁祸首,但 VS 代码仍然验证了这个导入!
答案 3 :(得分:1)
你可以试试这个:
user.collection.findOne(...)
答案 4 :(得分:0)
也许您没有从用户模型文件夹中导出模型。 例如: module.exports =用户= mongoose.model(“ users”,UserSchema);
答案 5 :(得分:0)
从名为user.js的文件的models目录中导出用户Model。
module.exports.User = User
然后从任何其他方式加载用户模型
const {User} = require('../models/user.js');
注意:我假设用户模型文件名为 user.js
答案 6 :(得分:0)
使用
module.exports = User = mongoose.model("users", UserSchema);
代替
module.exports = User => mongoose.model("users", UserSchema);
答案 7 :(得分:0)
这是导出和导入模型的方式。如果将模型定义为const User = mongoose.model("users", UserSchema);
,则通过export default User;
导出模型。您应该使用以下内容导入该文件:
import User from '../db/models/user';
代替
const User = require('../db/models/user');
答案 8 :(得分:-1)
我也有这种情况,
const User = require('../../mongoose/User');
User.findOne(...);
返回“ findOne不是函数”
但是通过更改为:
var User = require('../../mongoose/User');
User.findOne(...);
..它有效。 希望我能帮助一个人!
答案 9 :(得分:-2)
在我的情况下,我这样定义用户↓
const User = '../../models/User'
而不是↓
const User = require('../../models/User')