参考 http://www.runoob.com/mongodb...
推荐使用 brew 安装html
安装完成后运行mongodbnode
1.安装mongoose
使用npm下载模块时候会发现很慢,因此推荐淘宝的镜像。git
cnpm i mongoose --save
2.在index.js中链接数据库github
// 加载数据库模块 const mongoose = require("mongoose"); mongoose.connect('mongodb://localhost:27017/testblog',function(err){ if(err){ console.log('数据库链接失败'); }else{ console.log('数据库链接成功'); app.listen(4000); } });
这里的testblog 是咱们建立的数据库名称,终端运行node . 或者node index.js 打印数据库链接成功就说明服务已经启动web
1.在写接口以前还须要安装一个body-parser插件,body-parser是很是经常使用的一个express中间件,做用是对post请求的请求体进行解析。mongodb
cnpm i body-parser --save
在index.js中引入数据库
var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json())
2.在routers下新建user.js,配置路由express
const express = require('express'); const router = express.Router(); router.get('/regiest', function(res, rep) { rep.send('Hello, word!'); }); module.exports = router;
在index.js中使用app.use('/user',require('./routers/user'));这种方式加载路由npm
var express = require('express'); var app = express(); var bodyParser = require('body-parser'); // 注意解析要放在上面 app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) app.use('/user',require('./routers/user')); // 加载数据库模块 const mongoose = require("mongoose"); mongoose.connect('mongodb://localhost:27017/testblog',function(err){ if(err){ console.log('数据库链接失败'); }else{ console.log('数据库链接成功'); app.listen(4000); } });
从新启动服务,在浏览器中输入http://localhost:4000/user/regiest,能够看到打印信息说明路由配置成功。json
3.在schemas文件夹下新建user.js , 用户相关的Schema
var mongoose = require('mongoose') module.exports = new mongoose.Schema({ // 用户名 userName: String, // 密码 passWord: String, // 注册日期 creatDate: Date, token: String })
4.在models文件夹下新建user.js, 建立用户相关的模型,数据库的相关操做都是经过models下面咱们建立的模型来操做的。
var mongoose = require('mongoose') var userSchema = require('../schemas/user') module.exports = mongoose.model('User', userSchema)
5.注册接口
router.post('/regiest', function(req, res, next) { var userName = req.body.userName var password = req.body.passWord var rePassWord = req.body.rePassWord if (userName === '') { responseData.success = false responseData.message = '用户名不能为空' res.json(responseData) return } if (password === '') { responseData.success = false responseData.message = '密码不能为空' res.json(responseData) return } if (password !== rePassWord) { responseData.success = false responseData.message = '两次输入的密码不一致' res.json(responseData) return } User.findOne({ userName: userName }).then((userInfo) => { if (userInfo) { // 数据库中有 responseData.success = false responseData.message = '该用户已存在' res.json(responseData) return } else { // 写入数据库 //获取hash值 密码加密 var hash = bcrypt.hashSync(password, 10) //把hash值赋值给password变量 password = hash var user = new User({ userName: userName, passWord: password, creatDate: new Date(), }) return user.save() } }).then((newUserInfo) => { responseData.success = true responseData.message = '恭喜您,注册成功' responseData.data = { userName: newUserInfo.userName, userId: newUserInfo._id } res.json(responseData) }) });
其中bcrypt是加密相关的库
cnpm i bcrypt --save
重启服务,测试注册接口。
6.启动blogclient,咱们如今页面上放置几个简单的文本框来测试登陆接口,关于blogclient的具体网络配置部分可参考具体的demo
7.登陆接口的要注意的是token的生成规则,依赖框jsonwebtoken和express-jwt
cnpm i jsonwebtoken --save cnpm i express-jwt --save
// 登陆 const jwt = require('jsonwebtoken'); router.post('/login', function (req, res, next) { var userName = req.body.userName var password = req.body.passWord User.findOne({ userName: userName }).then((userInfo) => { if (userInfo) { // 判断密码是否正确 const pwdMatchFlag = bcrypt.compareSync(password, userInfo.passWord); if (pwdMatchFlag) { responseData.success = true responseData.message = '登陆成功' responseData.data = { userName: userInfo.userName, userId: userInfo._id, // token 有效期12h(60 * 60 * 12) token: jwt.sign({ data: {_id:userInfo._id,username:userInfo.userName}, exp: Math.floor(Date.now() / 1000) + (60 * 60 * 12) }, 'jwt-secret') } res.json(responseData) return } else { responseData.success = false responseData.message = '密码错误' res.json(responseData) return } } else { responseData.success = false responseData.message = '该用户不存在' res.json(responseData) return } }) });
在index.js中导入
var jwt = require('express-jwt'); // token相关regiest和login不须要token验证 var jwt = require('express-jwt'); app.use(jwt({secret: 'jwt-secret', debug: true}).unless({ path: ['/user/regiest', '/user/login'] }))