Node.JS Schema.pre('save) 不更改数据

2024-03-27

我正在制作用户授权系统,并希望在将密码保存到数据库之前对其进行哈希处理。为了达到这个目的,我使用 bcrypt-nodejs。 上面标题中的问题;

var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');

var userSchema = new mongoose.Schema({
    email: { 
         type: String,
         unique: true,
         required: true,
    },
    username: {
         type: String,
         unique: true,
         required: true
    },
    password: { 
         type: String,
         unique: true,
         required: true
    }
});

userSchema.pre('save', (next) => {
    var user = this;
    bcrypt.hash(user.password, bcrypt.genSaltSync(10), null, (err, hash) => {
        if (err) {
            return next(err);
        }
        user.password = hash;
        next();
    })
});

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

下面是您问题的解决方案:

var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');

var userSchema = new mongoose.Schema({
  email: {
    type: String,
    unique:true,
    required: true
  },
  username: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  }
});

userSchema.pre('save', function() {
  console.log(this.password);
  this.password = bcrypt.hashSync(this.password);
  console.log(this.password);
});

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

我用来运行解决方案的代码:

exports.create = async function () {
  let user = new User({
    email : '[email protected] /cdn-cgi/l/email-protection',
    username: 'new username',
    password: '123abc'
  });

  return await user.save()
    .then((result) => {
      console.log(result);
    }).catch((err) => {
      console.log(err)
    });
};

你的第一个问题是你不能使用箭头函数在这种类型的方法中:同样的错误已解决 https://stackoverflow.com/questions/37365038/this-is-undefined-in-a-mongoose-pre-save-hook

第二个问题是你需要调用bcrypt.hashSync方法,如果你不想处理 Promise。

关于您的架构的一项观察,所有字段都是唯一的。这个属性唯一:真实将在数据库中创建索引,并且您将无法通过密码找到该用户。这里是 Moongose 文档:猫鼬文档 http://mongoosejs.com/docs/validation.html

对于初学者来说,一个常见的问题是模式的唯一选项不是验证器。它是构建 MongoDB 唯一索引的便捷助手。请参阅常见问题解答以获取更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.JS Schema.pre('save) 不更改数据 的相关文章

随机推荐

  • 视图被关闭时发生自动布局内部错误

    当我驳回一些我有一些限制的观点时 我遇到了一个有趣的错误 自动布局内部错误 找不到传出行头 期间传入head AppName ViewName 0x7fc072ed8ef0 Width id 6805 系数接近零的变量的优化 应该 永远不会
  • JSON 名称-值对可以有空名称吗?

    我正在使用测试套件中的 example json 测试我的 JSON 代码here https code google com p json test suite 它包含很多名称 值对 其中名称只是一个空字符串 即 它是否正确 RFC462
  • 雅虎财经 API - GET 报价返回“无效 Cookie”

    在过去的几年中 我一直使用以下链接来获取查询中符号的完整当前报价 https query1 finance yahoo com v7 finance quote symbols AAPL https query1 finance yahoo
  • 如何将自定义表情符号上传到我的 Discord 机器人

    我已经制作了一个不和谐的机器人 现在我想开始添加自定义表情符号 我看过很多关于如何使用 client cache 或其他东西来输入表情符号的教程 但如何上传它们并获取它们的 ID 以在我的不和谐机器人中使用 我希望得到快速而简单的答案 lt
  • Google Analytics - 多个帐户的多个跟踪器?

    也许我的做法是错误的 但我希望我能得到一些见解 我为全国多个客户开发 我使用我的个人 开发分析帐户来跟踪我的许多网站 该帐户跟踪我所处理的所有域 配置文件 然而 现在营销人员也加入了进来 他们都希望安装自己的 GA 跟踪器 以及其他一些第三
  • 快速创建线程?

    我正在尝试快速生成一个线程 所以我有这一行 let thread NSThread target self selector doSomething object nil doSomething 是类范围内的函数 该行给出了这个错误 找不到
  • Java 的 SASS 实现? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 Java 中的 SASS 实现 可以与 JSP JSF 一起使用 对于 Python 我找到了 CleverCSS 但对于 J
  • 把我从 IE6 中拯救出来

    我正准备开始为一家相当大的公司开发一个新的网络项目 对于他们的所有用户 大约 17 000 人 来说 他们都被 IE6 困住了 他们计划在今年年底前让所有人过渡到 IE7 但 IT 部门开始推迟这一承诺 我被要求做的是给项目发起人更多的支持
  • 臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序

    我正在尝试将支持数据库的 JSP 添加到现有的 Tomcat 5 5 应用程序 GeoServer 2 0 0 如果有帮助的话 应用程序本身与 Postgres 通信得很好 所以我知道数据库已启动 用户可以访问它 所有这些都是好东西 我想要
  • 如何在Android中获取电话簿中的所有联系人到SIM卡中?

    我正在努力从我的应用程序中的电话簿和 SIM 卡中获取所有联系人 我想将所有联系人存储在我的应用程序 SQLite DB 中 我正在使用的代码在正常情况下工作正常 在以下条件下出现问题 对于没有名字的联系人 那只是号码 SIM 卡中的联系人
  • 在 Javascript 中访问 Json

    SponsorID 382 SponsorName Test Name MonthEndReport true AccountingManager Me UnboundProperties State 16 当我尝试像这样访问上面的内容时
  • Google应用程序引擎过多的数据存储小操作

    我的网站有大约 50 个用户 并且我正在进行过多的小型数据存储操作 我正在积极进行内存缓存 没有那么多记录 但我仍然得到数百万个小型数据存储操作 Appstats 说成本为 0 但实际成本并非 0 我基本上知道小型数据存储操作可能发生在哪里
  • Rails,咖啡脚本出现语法错误

    我正在尝试使用 jquery ui 库在 Rails 中执行自动完成功能 但是我不断收到语法错误 语法错误 保留字 函数 在线 这是我的 Lesson js coffee 文件 jQuery gt function function spl
  • 在 Ruby on Rails 中获取控制器中 URL 的锚点部分

    有没有办法在控制器中获取 URL 的锚点部分 示例 如果我输入http www foo com bar anchor123 http www foo com bar anchor123我可以在我的控制器中获取字符串anchor123吗 在
  • 重写子文件夹的 url 条件

    我这里有一个 htaccess 文件 en htaccess 我想让这个条件 适用于 public html 内的主要 htaccess 也适用于子文件夹en RewriteCond THE REQUEST events eventDeta
  • 打开文件和读取内容的最可靠的方法是什么[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 当我必须始终读取整个文件时 我通常会
  • 使用 jQuery 设置列宽

    我有带有格式的 html 表 div table tbody tr td Set Width 10 Px td td Set Width 20 Px td tr tr Same for all tr tr tbody table div 即
  • 为什么 IDEA 显示 JavaDoc 错误?

    param string throws ApplicationException IDEA 突出显示 字符串 并告诉 未找到文档 为什么会这样 为以下内容编写一些文档string参数或调整声明有 Javadoc 问题检查设置 以免报告此类问
  • 应用程序要求首先将程序集 microsoft.reportviewer.processingObjectModel 版本 11.0.0.0 安装在全局程序集缓存中

    我有一个在 Visual Studio 2012 中创建的小型 Windows 窗体应用程序 它使用 ReportViewer 版本 11 0 0 0 应用目标框架为 NET 4 0 部署方式为ClickOnce 在我的电脑上可以安装 但在
  • Node.JS Schema.pre('save) 不更改数据

    我正在制作用户授权系统 并希望在将密码保存到数据库之前对其进行哈希处理 为了达到这个目的 我使用 bcrypt nodejs 上面标题中的问题 var mongoose require mongoose var bcrypt require