最近在学些NodeJs和Express框架开发后台接口,Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。...Express中怎么做用户登录和注册,以及jsonwebtoken的验证,需要在系统中安装MongoDB数据库;于是在自己的Windows10系统下使用VSCode跟着做,前提是要安装好NodeJs和Express...开发环境,以及在Windows系统中配置好MongoDB数据库,关于在Windows下安装MongoDB可以参考菜鸟教程中的Windows 平台安装 MongoDB和windows环境下启动mongodb...在国内安装比较慢,最好用淘宝的cnpm镜像安装。...其中Rest-Client插件在VSCode中如下图所示: ?
更新 (8.7): 在他们的教程中,RisingStack 已经声明,不要再以明文存储密码,在示例代码和教程中选择使用了 bcrypt。...它使用 Mongoose ODM,实际上从我的数据库读取凭据。 这一个教程算是比较完整的,包括集成测试,是的,你可以使用另一个样板。...但是,Mongoose ODM 也存储类型为 String 的密码,所以这些密码也存储在明文中,只是这一次在 MongoDB 实例上。...我喜欢在明文的密码中使用令牌。 现在,任何一个包括存储在 Mongoose 模型甚至过期的令牌都有你的密码。鉴于这个来自HTTP,我可以把它从线上找出来。 下一个教程怎么样呢?...拷贝教程中的例子可能会让你、你的公司和你的客户在 Node.js 世界中遇到身份验证问题。
安装插件 npm install mongoose 新建一个config文件夹 ,然后建一个 keys.js文件 module.exports = { // 没有数据库和密码的本地服务 mine.../routes/api/users') // 使用router app.use('/api/users',users); 在浏览器中输入路由 /api/users/test 端口是5000 新建模型...("users",UserSchema) 然后在 users.js中引入 const User = require('../.....完成注册接口 User是引入的我们刚才创建好的数据modal 密码加密 使用bcrypt npm install bcrypt router.post('/register',(req,res)=>{...试一试 再去MongoDB中查询一下 最后完整的代码 config/keys.js module.exports = { // 没有数据库和密码的本地服务 mongoURI :
创建好的 Node.js 项目架构 大多数时候,我们在大团队中工作,不同的人处理系统的不同部分,如果事情没有得到妥当安排,就会变得混乱。...Node.js 的惊人之处在于,你可以随心所欲地构造代码,没有所谓的“正确的方法”。你可以选择在一个 app.js 文件中编写所有代码,也可以创建多个文件并将它们放在不同的文件夹中。...所有的文件和逻辑都保存在一个叫作 src 的文件夹中。 应用程序的入口和启动在 server.js 和 app.js 中。...它们用于组织我们在应用程序中传递的数据。因此,我们将在模型文件夹中创建两个文件——user.model.js 和 index.js 文件,我们将把所有模型都导入到 index.js 文件中。...user.model.js import mongoose from 'mongoose';import bcrypt from 'bcryptjs
POST insert data {"name":"admin123","pass":"123","status":1,"time":"1325472736"} 数据模型 此处先定义用户 User 对象,在...每一个 User 对象需要包含 用户名、密码、邮箱、公司 等信息, users.js 文件内容如下: // app/model/user.js module.exports = app => {...const mongoose = app.mongoose; const UserSchema = new mongoose.Schema({ email : {type: String,...(password, bcrypt.genSaltSync(5), null); }; UserSchema.methods.validPassword = function(password...) { return bcrypt.compareSync(password, this.password); }; return mongoose.model('User', UserSchema
当然,我们不必全部安装和学习它们。在大多数情况下,从每个类别中挑选一个两个就足够了。我想提供一些替代方案,以便我们能找到一些更好的工具。 现在,我们就开始今天的内容吧。...数据库工具 19、Mongoose 地址:https://www.npmjs.com/package/mongoose Mongoose 是一个 MongoDB 对象建模工具,旨在在异步环境中工作。...Mongoose 支持 Promise 和回调。...22、Bcrypt 地址:https://www.npmjs.com/package/bcrypt 帮助我们散列密码的库。...Bcrypt 是 Niels Provos 和 David Mazières 设计的密码散列函数,基于 Blowfish 密码并于 1999 年在 USENIX 上提出。
数据库工具 19.Mongoose[40] Mongoose 是一个 MongoDB 对象建模工具,设计用于在异步环境中工作。Mongoose 支持 Promise 和回调。...22.Bcrypt[43] 它是可以帮助你生成哈希密码的库。...Bcrypt 是由 Niels Provos 和 David Mazieres 基于 Blowfish cipher 设计的密码哈希函数,并于 1999 年在 USENIX 上展出。...配置模块 24.Config[45] 设置存储在应用程序中的配置文件中,可以由环境变量、命令行参数或外部源覆盖和扩展。...39.Faker[62] 实用的 npm 包,用于在浏览器和 Node.js 中制造大量假数据。 ✅ 校验工具 40.Validator[63] 便捷的字符串验证器,使程序更加健壮的库。
登录 校验 token处理 1.环境搭建运行 在目录里安装express和mongoose,并在根目录创建server.js文件和models文件, 在server.js文件中 const express...文件测试,可以看出来返回的结果是我们填写的用户名和密码,但是这样密码暴露了,对用户信息造成安全隐私问题。...安装加密bcryptjs依赖包,这个和bcrypt原理是一样的,如果第bcrypt安装不成功,就是要bcryptjs安装就行,用法 一样的 cnpm install bcryptjs --save 然后直接对模型进行修改就行...,直接在password添加set,对返回值进行处理就行,通过bcryptjs中的hashSync生成hash密码 const UserSchema = new mongoose.Schema({...上面这种返回密码格式,就是我们需要的格式,保障用户密码的安全性 登录功能 登录和注册用的字段一样的。
使用前后端分离,前端文件位于 front_end 文件夹 配置在 config/default.js ,当然可以在具体文件配置,但是这儿方便一点 在线 demo:https://auth.bilibilianime.com...[x] 图形验证码 [x] bcrypt 加密存储密码 依赖 express 轻量级 web 框架 jsonwebtoken 生成 token models MongoDB 的对象模型 svg-captcha...} ); return false; }; server.js 里写各种 api, 通过 model.js 里导出的 User 进行数据增、查操作, 定义了一些中间件来对输入的用户名,密码和...User.create 操作时, 密码就会被加盐, 然后哈希, 存入数据库. bcrypt 的盐无需存储....当前端输入的验证码传来, 就和这个 session 中的比较一下.也是一个中间件 const captcha = async (req, res, next) => { const cap = String
数据库工具 19.Mongoose Mongoose 是一款用于在异步环境下使用的 MongoDB 对象建模工具。Mongoose 支持回调机制。...项目链接: https://www.npmjs.com/package/passport 22.Bcrypt 用于密码散列处理的库。...Bcrypt 是由 Niels Provos 与 David Mazières 共同设计的一种密码散列函数,以 Blowfish 密码为基础,于 1999 年首次在 USENIX 上亮相。...配置模块 24.Config 对存储在应用程序中的配置文件进行设置,可以通过环境变量、命令行参数或外部源进行覆盖及扩展。...两大出色工具在代码中对图像进行创建、编辑、合成与转换。
简介 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考...'m'的名字,且不区分大小写,模糊查询比较常用,正则形式匹配,正则方式就是javascript正则,用到的比较多!...,分页原理用过其它数据库的都知道,分页用到的函数和mysql的比较类似 上面我用到sort(),这个是排序规则,就不单讲了!...其它操作 其它还有比较多常用的 索引和默认值 再看看我对user.js这个schema的修改 /** * 用户信息 */ var mongoose = require('....mongoose操作基本入门大致就是这些,自已试一下,入门完全没问题,并且比node-mongodb-native还是要简单明了一些, 在node.js中操作数据库,如果逻辑相对复杂时,大量的回调嵌套还是比较郁闷的
数据格式规范化 异常处理 前一篇文章讲了手撸degg,如何实现捕获异常的中间件,现在看看在egg中怎么做(方法和思维几乎一样): // /middleware/error_handler.js'use...-s 在插件里补上这么一句: // plugin.jsmongoose : { enable: true, package: 'egg-mongoose',}, // config.default.js...}}) return mongoose.model('User', UserSchema)} service 先安装哈希依赖: npm install egg-bcrypt -s 在插件中定义:...bcrypt : { enable: true, package: 'egg-bcrypt' } 创建server层,直接调用mongoose的 create API。...configWillLoad() { // 此时 config 文件已经被读取并合并,但是还并未生效 // 这是应用层修改配置的最后时机 // 注意:此函数只支持同步调用 // 例如:参数中的密码是加密的
Mongoose是在node.js环境下对mongodb进行便捷操作的对象模型工具。...://用户名:密码@127.0.0.1:27017/数据库名称') 连接多个数据库 如果你的app中要连接多个数据库,只需要设置多个url以,隔开,同时设置mongos为true mongoose.connect...” var mongoose = require('mongoose'); mongoose.connect("mongodb://localhost/test", function(err) {...){ console.log('连接失败'); }else{ console.log('连接成功'); } }); 如果开启鉴权控制,以用户名"u1",密码...执行代码后,控制台输出“连接成功” var mongoose = require('mongoose'); mongoose.connect("mongodb://u1:123456@localhost
Bcrypt 这是一个用于在 Node.js 应用程序中进行安全密码哈希的库。它使用了bcrypt算法,该算法旨在保护用户密码免受未经授权的访问。它在 GitHub 上有超过7千颗星。...以下是 bcrypt 库的用法和相关的代码示例: 1、首先,您需要在您的 Node.js 项目中安装 bcrypt 库,可以使用以下命令: npm install bcrypt 2、在您的 Node.js...应用程序中,导入 bcrypt 并使用它来进行密码哈希: const bcrypt = require('bcrypt'); const saltRounds = 10; // 这是生成 salt 的轮数...首先我们使用 bcrypt.genSalt() 函数生成一个 salt,然后使用 bcrypt.hash() 函数将原始密码和 salt 进行哈希,生成最终的哈希密码。...您可以将这个哈希密码保存到数据库中。 当用户登录时,您可以使用 bcrypt.compare() 函数来比较用户输入的密码和数据库中的哈希密码,以进行密码验证。
之前在mongodb搞了个免费的512MB的mongodb数据库,刚好今天要搭建一个nodejs项目需要的数据库是mongodb,项目里的数据库连接的是本地localhost,因为是第一次接触nodejs...Node.js连接远程mongodb代码 const mongoose = require('mongoose'); const db = mongoose.connect("mongodb+srv:/.../数据库用户名:数据库密码@IP地址:端口/数据库名", { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify...代码 var process = require('child_process'); process.exec('mongorestore --uri="mongodb+srv://数据库用户名:数据库密码...} }) Node.js连接本地mongodb代码 const mongoose = require('mongoose'); const db = mongoose.connect("mongodb:
针对这个问题,一种解决方案是在保存用户密码时,不再使用明文,而是使用消息摘要算法,比如 MD5 算法对明文密码进行哈希运算,然后把运算的结果保存到数据库中。...示例 在 Node.js 环境中,我们可以使用 crypto 原生模块提供的 md5 实现,当然也可以使用主流的 MD5 第三方库,比如 md5 这个可以同时运行在服务端和客户端的第三方库。...6.2 密码加盐 盐(Salt),在密码学中,是指在散列之前将散列内容(例如:密码)的任意固定位置插入特定的字符串。这个在散列中加入字符串的方式称为 “加盐”。...其作用是让加盐后的散列结果和没有加盐的结果不相同,在不同的应用情景中,这个处理可以增加额外的安全性。 在大部分情况,盐是不需要保密的。盐可以是随机产生的字符串,其插入的位置可以也是随意而定。...密码越强大,您的数据就越安全。 下面我们以 Node.js 平台的 bcryptjs 为例,介绍一下如何使用 bcrypt 算法来处理用户密码。
({ name: 'node.js基础', anthor: '小蒙', isPublished: 'true' }) // 将文档插入数据库中 course.save();: '...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...1.7 集合关联 通常不同集合的数据之间是有关系的,例如文章信息和用户信息存储在不同集合中,但文章是某个用户发表的,要查询文章的所有信息包括发表用户,就需要用到集合关联。...使用ID将文章集合和作者集合进行关联 author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } })); //联合查询 Post.find...当用户访问/list时,将所有用户信息查询出来 实现路由功能 呈现用户列表页面 从数据库中查询用户信息 将用户信息展示在列表中 将用户信息和表格HTML进行拼接并将拼接结果响应回客户端
我不是故意在JAVA中谈尾递归的,因为在JAVA中谈尾递归真的是要绕好几个弯,只是我确实只有JAVA学得比较好,虽然确实C是在学校学过还考了90+,真学得没自学的JAVA好 不过也是因为要绕几个弯,所以才会有有意思的东西可写...n就能有n个方法),所以调用的方法数可能非常巨大 在自身中调用自身,是嵌套调用(栈帧无法回收,开销巨大) 因为上面2和3两个特点,所以递归调用最大的诟病就是开销巨大,栈帧和堆一起爆掉,俗称内存溢出泄露...因此,在栈中,只保存有基本类型的变量和对象引用。而引用所指向的对象保存在堆中。...,它能智能地释放那些被判定已经没有用的对象 四、现在我们就可以比较一下尾递归优化和垃圾回收了 他们最本质的区别是,尾递归优化解决的是内存溢出的问题,而垃圾回收解决的是内存泄露的问题 内存泄露:指程序中动态分配内存给一些临时对象...正在运行的方法的堆和栈空间正是优化的目标 最后可以解答一下前头提出的问题 通过比较可以发现尾递归和GC是完全不一样的,JAVA不会是因为有GC所以不需要尾递归优化。
这些模块可以将日志存储在不同格式或级别的文件中。我们将使用流行的ORM Mongoose 讨论 Node.js Express 程序中的 API 日志记录。...那么如何创建一个 Mongoose 插件,以更清洁的方式为你进行记录并简化 API 日志? Mongoose 中的插件是什么? 在 Mongoose 中,模式是可插入的。..._.isEqual: 在两个值之间进行深度比较,以确定它们是否相等。...对象通过它们自己的方法比较,而不是通过继承的、可枚举的属性进行比较。函数和 DOM 节点则进行严格相等的比较,即使用 ===。 这里我们迭代每个对象的属性和值,并将它与旧对象进行比较。...你还可以通过在架构模型中初始化它来将其用于特定架构。 const mongoose = require('mongoose') mongoose.plugin(require('.
领取专属 10元无门槛券
手把手带您无忧上云