參考 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'] }))