gpt4 book ai didi

node.js - 为什么只有当我尝试使用 find 函数时,我的 Sequelize 模型才未定义?

转载 作者:行者123 更新时间:2023-12-03 22:17:38 24 4
gpt4 key购买 nike

我正在尝试使用 Node.js 中的 ORM Sequelize 设置用户登录和注册。我的注册部分工作正常。我的模型实例被定义为 User,当我调用 User.createUser 时,我的模型函数起作用并且一个用户被添加到数据库中。但是,当我尝试在我的护照本地策略中使用我的 getUserNameById 函数时,出现错误“用户未定义”。我被困了一天多试图弄清楚这一点。

模型文件(我已经导入了 sequelize、bcrypt 并创建了一个连接)

var Users = connection.define("Users", {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: Sequelize.STRING
},
username: {
type: Sequelize.STRING
},
account: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},

}, {
timestamps: false
});


Users.sync();

connection.authenticate()
.then(function () {
console.log("CONNECTED! ");
})
.catch(function (err) {
console.log("MYSQL ERROR: FAILED TO CONNECT");
})
.done();



module.exports = function (connection, DataTypes) {
return Users;
}


module.exports.createUser = function (newUser) {
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(newUser.password, salt, function(err, hash) {
newUser.password = hash;
Users.create(newUser).then(function (Users){
console.dir(Users.get());
})
});
});
}

module.exports.getUserByUsername = function (username) {
return Users.find({
where: {username: username}
}).then(function (user) {}, function (err) {
console.log(err);
});
}


module.exports.comparePassword = function(candidatePassword, hash, done, user){
bcrypt.compare(password, hash, function(err, isMatch){
if (err) console.log(err)
if (isMatch) {
return done(null, user)
} else {
return done(null, false)
}
});
}



module.exports.getUserById = function(id, callback){
Users.findAll({
where: {id: id}
});
}

我的路线代码,特别是我遇到的本地护照策略
var User = require("../models/users");
var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
function (username, password, done) {
User.getUserByUsername(username, function (user) {
if(!user){
return done(null, false, {message:'Incorrect username'})
}
})
User.comparePassword(password, user.password, function (err, isMatch) {
if(err) throw err;
if(isMatch){
return done(null, user);
}else{
return done(null, false, {message: 'Invalid password'});
}
})
}
));

最佳答案

您的 ./models/user 类正在导出一个将 connectionDataTypes 作为参数的函数,但您没有将它们传入 - 应该通过连接。您不需要调用 connection.authenticate()

// new db connection
var connection = new Sequelize(
schema,
username,
password,
{
host: host,
dialect: dialect,
}
)
var DataTypes = // define DataTypes

// pass into User
var User = require("../models/users")(connection, DataTypes);

关于node.js - 为什么只有当我尝试使用 find 函数时,我的 Sequelize 模型才未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40978907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com