日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

node 实现Token状态登录 及数据库增删改查

發布時間:2025/3/20 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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状态登录 及数据库增删改查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。