gpt4 book ai didi

mysql - 用于 Sequelize 模型的 Mongoose 模式

转载 作者:行者123 更新时间:2023-12-02 11:22:05 25 4
gpt4 key购买 nike

我用 mongodb 制作了一个应用程序( Mongoose 作为 ODM)但现在我想使用 MySQL (工作义务)所以我拿了Sequelize模块,但我真的不明白如何使用它的所有方法将我的 userSchema 转换为用户模型(我正在使用 passportJs 进行身份验证,所以我有一些我正在使用的方法,例如 setpassword .. .)

这里我的 userSchema (mongoose) 可以完美运行。

var mongoose = require('mongoose');
var crypto = require('crypto');
var jwt = require('jsonwebtoken');
var validator = require('node-mongoose-validator');
var Schema = mongoose.Schema;

var userSchema = new Schema({
name: {
type: String,
maxlength: 50
},
mail: {
type: String,
required: true,
maxlength: 50,
index: {
unique: true
}
},
hash: String,
salt: String,
{
collection: "user"
}
);

userSchema.methods.setPassword = function(password) {
this.salt = crypto.randomBytes(16).toString('hex');
this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
};

userSchema.methods.validPassword = function(password) {
var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
return this.hash === hash;
};

userSchema.methods.generateJwt = function() {
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);

return jwt.sign({
_id: this._id,
mail: this.mail,
name: this.name,
exp: parseInt(expiry.getTime() / 1000),
}, process.env.JWT_SECRET); // secret code from .env
};

module.exports = mongoose.model('user', userSchema);

这里是我尝试过的 Sequelize :
 var crypto = require('crypto');
var jwt = require('jsonwebtoken');

var User = sequelize.define('user', {
name: Sequelize.STRING,
mail: Sequelize.STRING,
hash: Sequelize.STRING,
salt: Sequelize.STRING


});

User.methods.setPassword = function(password) {
this.salt = crypto.randomBytes(16).toString('hex');
this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
};

User.methods.validPassword = function(password) {
var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
return this.hash === hash;
};

User.methods.generateJwt = function() {
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);

return jwt.sign({
_id: this._id,
mail: this.mail,
name: this.name,
exp: parseInt(expiry.getTime() / 1000),
}, process.env.JWT_SECRET); // DO NOT KEEP YOUR SECRET IN THE CODE!
};


module.exports = User;

我没有测试,因为我需要开发另一部分,但我需要知道你有没有想过,我觉得它充满了错误

先感谢您

最佳答案

我将专注于定义一个带有实例方法的模型,一些特定于 passportjs 和 mongoose 的逻辑,你可能需要以不同的方式实现。
2 ways定义模型。

  • sequelize.define 就像您实现的方式一样,您可以使用 User.prototype.yourMethod 附加实例方法自从 User is a ES6 class

  • var User = sequelize.define('user', {
    name: DataTypes.STRING,
    mail: DataTypes.STRING,
    hash: DataTypes.STRING,
    salt: DataTypes.STRING,
    /* ... */
    });

    User.prototype.validPassword = function(password) {
    var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
    return this.hash === hash;
    };

    /*
    If you want an equivalent of User.statics.yourStaticMethod = function() {}
    or User.static('yourstaticmethod', function() {})
    You can use the following
    */

    User.yourStaticMethod = function() {};
  • 您也可以extend Model
  • class User extends Model {
    static yourStaticMethod() {} // in mongoose equivalent to User.statics.yourStaticMethod = function() {}
    validPassword(password) {
    var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64).toString('hex');
    return this.hash === hash;
    }
    };

    User.init({
    name: DataTypes.STRING,
    mail: DataTypes.STRING,
    hash: DataTypes.STRING,
    salt: DataTypes.STRING,
    /* ... */
    }, {
    sequelize,
    modelName: 'user'
    });


    关于mysql - 用于 Sequelize 模型的 Mongoose 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36058931/

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