根据其他学习网站中的描述,nodejs就是一个运行在服务端的JavaScript,也就是说nodejs实现了使用js编写服务端的功能,如果你对编程语言的进行深入了解的仅有JavaScript的话,那么我推荐你可以了解一下nodejs,这样你在仅仅使用js的情况下就可以进行全栈的开发。
对于nodejs的学习这里主要推荐还是nodejs官网。
express是一个比较小的web开发框架,也是目前我们公司用的比较多的一个框架,使用nodejs+express可以很简洁的完成后端接口,使用express的话也比较方便,以下步骤是来自express官网。
$ mkdir myapp//创建文件夹
$ cd myapp//进入文件夹内
$ npm install express --save//安装express
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Example app listening on port 3000!'))
上述代码表示监听的为3000端口,使用'node app.js'
命令将项目启动,进入浏览器或接口测试工具postman中输入127.0.0.1:3000
即可获取上述第三行代码中的返回值'hello world!'
sequelize是一个连接数据库和访问数据库的框架,在nodejs中使用sequlize可以非常方便的进行连接和操作数据库,甚至可以抛弃最常用的sql语句,使用自身所提供的各种方法进行数据的增删改查,让代码看起来更加的一致和简洁。学习的话主要推荐两个网址一个是官网,另外一个是中文版的api文档方便查找,不过想要深入了解建议研读官网。
对于sequelize的学习在中文版的api文档中也有说明,在此就不做过多说明。
(对于React的介绍由于自身了解的并不是很深入,以后在做说明。。。)
注册和登录的功能相比较其他功能简单一些;
注册加密流程图:
登录加密流程图:
直接上代码了,关键点会在代码中注释出来:
bcryptjs的安装方式npm install bcryptjs
, bcryptjs的npm地址
const bcrypt = require('bcryptjs');//引入bcryptjs
app.post('/addUser', function (req, res, next) {
var salt = bcrypt.genSaltSync(10);//设置加密等级,如果不设置默认为10,最高为10
res.setHeader('Access-Control-Allow-Origin', '*');
try {
let name = req.body.username;
let password = req.body.password;
var hash = bcrypt.hashSync(password, salt);//将获取到的密码进行加密,得到密文hash
console.log("name:---->", name, "password:--->", password, "hash:---->", hash);
if (!name || !password) {
res.send({
"code": 200,
"message": L10N.ERROR_PARAMETER
});
return next();
}
db.addUser(name, hash);//将用户名和密文一同插入至数据库中
res.send({
"code": 200,
"message": "Success"
})
} catch (err) {
next(err)
}
})
测试后台输出:
数据库中数据:
app.get('/login', function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
db.login(req.body.username, req.body.password).then(userinfo => {//根据用户名获取数据库中的密文
if (userinfo == null && userinfo) {
res.status(200).send({
"code": 200,
"message": L10N.ERROR_USER_PASSWD
});
} else {
let password = userinfo.password;//获取密文
if (bcrypt.compareSync(req.body.password, password)) {//将输入的密码与密文进行比对
res.status(200).send({
"code": 200,
"message": "success!"
});
} else {
res.status(200).send({
"code": 200,
"message": "error!"
});
}
}
});
});
测试结果:
至此,加密情况下的登录注册已经基本完成,中间省略了部分无关紧要的代码,对于安全系数较高的项目只采用这种加密方式也是远远不够的。对于文章中的不足希望积极指出~
( LPL洲际赛冲!!!!)