node 实现Token状态登录 及数据库增删改查
生活随笔
收集整理的這篇文章主要介紹了
node 实现Token状态登录 及数据库增删改查
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.項目目錄結構
2.啟動入口文件代碼index.js
const express = require('express') const bodyParser = require('body-parser') const cookieParser = require('cookie-parser')const userRouter = require('./user') const personRouter = require('./person') const checkToken = require('./check_token')const app = express() app.use(cookieParser()) app.use(bodyParser.json())app.use('/api',userRouter) app.use('/api',checkToken,personRouter) app.listen(9093, function() {console.log('Node app start at port 9093') });3.mongoose連接數據庫model.js
const mongoose = require('mongoose'); // 鏈接mongo 并且使用imooc這個集合 const DB_URL = 'mongodb://localhost:27017/demo'; mongoose.connect(DB_URL);const models = {user:{'user':{type:String, 'require':true},'pwd':{type:String, 'require':true},'type':{'type':String, 'require':true},//頭像'avatar':{'type':String},// 個人簡介或者職位簡介'desc':{'type':String},// 職位名'title':{'type':String},// 如果你是boss 還有兩個字段'company':{'type':String},'money':{'type':String}},person:{//創建時間date:{'type':String},//聯系人名字 name:{type:String},//聯系人年齡 age:{type:Number},//聯系人性別sex:{'type':String},//聯系人地址address:{'type':String}} };for(let m in models){mongoose.model(m, new mongoose.Schema(models[m])) };module.exports = {getModel:function(name){return mongoose.model(name)} };4.登錄邏輯處理user.js
const express = require('express') const utils = require('utility') const sd = require('silly-datetime') const jwt = require('jsonwebtoken')const Router = express.Router() const model = require('./model') const User = model.getModel('user') const _filter = { 'pwd': 0, '__v': 0 } const secret = 'zero'Router.post('/loginRegister', function(req, res) {const { user, pwd } = req.bodyUser.findOne({ user }, function(err, doc) {if (doc) {if (doc.pwd != md5Pwd(pwd)) {return res.json({ code: 1, msg: '用戶名或者密碼錯誤' })} else {let token = jwt.sign(doc.toJSON(), secret, {expiresIn: 60 * 60 //秒到期時間 });let { _id, user } = docreturn res.json({ code: 0, data: { _id, user, token } })}} else {const userModel = new User({ user, pwd: md5Pwd(pwd) })userModel.save(function(e, d) {if (e) {return res.json({ code: 1, msg: '后端出錯了' })}let token = jwt.sign(d.toJSON(), secret, {expiresIn: 60 * 60 //秒到期時間 });let { _id, user } = dreturn res.json({ code: 0, data: { _id, user, token } })})}})})function md5Pwd(pwd) {const salt = '!@~#Zero389409258'return utils.md5(utils.md5(pwd + salt)) }module.exports = Router;5.token驗證中間件check_token.js
var jwt = require('jsonwebtoken') const secret = 'zero' module.exports = function(req, res, next) {//檢查post的信息或者url查詢參數或者頭信息var token = req.body.token || req.query.token || req.headers['x-access-token']// 解析 tokenif (token) {// 確認tokenjwt.verify(token, secret, function(err, decoded) {if (err) {return res.json({ code: 1, msg: 'token信息錯誤或失效!' })} else {// 如果沒問題就把解碼后的信息保存到請求中,供后面的路由使用req.api_user = decodednext()}});} else {// 如果沒有token,則返回錯誤return res.status(403).send({code: 1,msg: '沒有提供token!'})} }6.mongoose增刪改查person.js
const express = require('express') const utils = require('utility') const sd = require('silly-datetime') const jwt = require('jsonwebtoken')const Router = express.Router() const model = require('./model') const Person = model.getModel('person') const _filter = { 'pwd': 0, '__v': 0 }Router.post('/personSave', function(req, res) {const { name, sex, age, address, _id } = req.bodyconst body = req.bodylet date = sd.format(new Date(), 'YYYY-MM-DD HH:mm')const personModel = new Person({ name, sex, age, address, date })if (_id == '') {personModel.save(function(e, doc) {if (e) {return res.json({ code: 1, msg: '后端出錯了' })}return res.json({ code: 0, data: { name, sex, age, address, _id } })})} else {Person.findByIdAndUpdate(_id, { name, sex, age, address }, function(err, doc) {const data = Object.assign({}, doc)return res.json({ code: 0, data: data })})} })Router.post('/personRemove', function(req, res) {const _id = req.body._id;Person.findByIdAndRemove(_id, function(err, doc) {return res.json({ code: 0, data: doc })})})Router.get('/personList', function(req, res) {Person.find({}).skip(0).limit(10).sort({ '_id': -1 }).exec(function(err, doc) {Person.count({}, function(err, count) {let data = {count: count,personDataList: doc}return res.json({ code: 0, data: data })})});})module.exports = Router;項目運行需啟動本地mongodb
完整項目具體demo貼上 github :?https://github.com/zhuzeliang/node-vue-demo
?
轉載于:https://www.cnblogs.com/zhuzeliang/p/9028592.html
總結
以上是生活随笔為你收集整理的node 实现Token状态登录 及数据库增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习五十三
- 下一篇: MySQL主从复制原理、半同步操作步骤及