112Express-密码加密bcrypt、mongoose数据库连接、账号密码非写死、并判断当前环境为开发还是生产环境

数据库明文存储密码不安全

bcrypt哈希加密是单程加密方式,只能加密不能解密 1234-abcd
在加密的密码中加入随机字符串可以增加密码被破解的难度

依赖的环境

bcrypt依赖的其他环境

  1. python 2.x 安装完配置环境变量 【资源见上传资源】
    安装好后需要配置到环境变量中
    在这里插入图片描述

  2. node-gyp
    npm install -g node-gyp

  3. windows-build-tools
    npm install --global --production windows-build-tools
    在这里插入图片描述

// 导入bcrypt模块
const bcrypt = require('bcrypt');
async function run() {
// 生成随机字符串gen=>generate生成salt盐
let salt = await bcrypt.genSalt(10);
//使用随机字符串对密码进行加密 
let pass = await bcrypt.hash('明文密码', salt);

// 密码比对
let isEqual =await bcrypt.compare('明文密码','加密密码')
}

区分当前项目环境为开发环境还是生产环境

变量名 NODE_ENV
变量值 development 开发环境
 production 生产环境

在这里插入图片描述

1、设置系统环境变量

在这里插入图片描述

2、在代码中获取环境变量的值并判断
 如何区分开发环境与生产环境
 if (process.env.NODE_ENV == 'development') {
    // 开发环境
} else {
    // 生产环境
}

实际情况

// 获取系统环境变量。返回值是对象
if (process.env.NODE_ENV == 'development') {
    // 当前是开发环境
    console.log('当前是开发环境');
    // dev是固定的 在开发环境中将客户端发送到服务器端的请求信息打印到控制台中
    app.use(morgan('dev'))
} else {
    // 当前是生产环境
    console.log('当前是生产环境');
}

morgan

npm install morgan
显示请求信息
在这里插入图片描述

mongoose数据库连接、账号密码非写死

第三方模块config
作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境,
并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动到项目代码
中修改配置信息

使用步骤
使用npm install config命令下载模块
在项目的根目录下新建config文件夹
在config文件夹下面新建default.json(如果开发和生产都没有的属性,才回最后到default寻找)、(开发环境读取这个)development.json、(生产环境读取这个)production.json文件
在项目中通过require方法,将模块进行导入
使用模块内部提供的get方法获取配置信息

================

// 导入config模块
const config = require('config');
config.get('title')

在这里插入图片描述
会自动识别是开发环境还是生产环境并去相应的json文件去找数据
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

将敏感配置信息存储在环境变量中
在config文件夹中建立custom-environment-variables.json文件
配置项属性的值填写系统环境变量的名字
项目运行时config模块查找系统环境变量,并读取其值作为当前配置项属于的值
在这里插入图片描述

在这里插入图片描述

// 导入config模块
const config = require('config');

数据库连接

配置json数据
在这里插入图片描述
连接数据库

// mongoose引入
const mongoose = require('mongoose');
const config = require('config');
// 连接数据库
mongoose.connect(`mongodb://${config.get('db.user')}:${config.get('db.pwd')}@${config.get('db.host')}:${config.get('db.port')}/${config.get('db.name')}`, { useUnifiedTopology: true, useNewUrlParser: true })
   .then(() => { console.log('数据库连接成功') })
   .catch(() => { console.log('数据库连接失败') })
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页