问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

express-session存入mongodb 怎么识别

发布网友 发布时间:2022-04-09 19:39

我来回答

2个回答

懂视网 时间:2022-04-10 00:00

安装MongoDB:
https://www.mongodb.com/download-center?jmp=nav

安装Mongoose:

$ npm install mongoose --save

一、连接MongoDB

在项目根目录下新建/lib/mongo.js

var mongoose = require("mongoose");

var db = mongoose.connect(‘mongodb://localhost:27017/myblog‘);

module.exports = db

要连接的数据库为myblog

二、Schema

一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架

新建一个用户Schema

在项目根目录下新建/models/users.js

var mongoose = require("mongoose");
var db = require(‘../lib/mongo‘);
//一个用户模型
var UserSchema = new mongoose.Schema({
 username : { type:String },
 password : {type: String},
 avatar : {type: String},
 age  : { type:Number, default:0 },
 description : { type: String},
 email : { type: String },
 github : { type: String },
 time : { type:Date, default:Date.now }
});
//创建Model
var UserModel = db.model("user", UserSchema );
module.exports = UserModel
  • user:数据库中的集合名称,当我们对其添加数据时如果user已经存在,则会保存到其目录下,如果不存在,则会创建user集合,然后在保存数据。

  • 拥有了Model,我们也就拥有了操作数据库的金钥匙,就可以使用Model来进行增删改查的具体操作。

  • Entity

    由Model创建的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操作,但Model比Entity更具操作性。

    var UserEntity = new UserModel({
     name : "hzzly",
     age : 21,
     email: "hjingren@aliyun.com",
     github: ‘https://github.com/hzzly‘
    });
    UserEntity.save(function(error,doc){
     if(error){
     console.log("error :" + error);
     }else{
     console.log(doc);
     }
    });

    三、封装数据库的CURD

  • 在lib文件下新建api.js

  • 采用Promise封装对数据库的操作,避免回调地狱,使得代码能够更好的被读懂和维护。

  • var UserModel = require(‘../models/users‘);
    
    module.exports = {
     /**
     * 添加数据
     * @param {[type]} data 需要保存的数据对象
     */
     save(data) {
     return new Promise((resolve, reject) => {
      //model.create(保存的对象,callback)
      UserModel.create(data, (error, doc) => {
      if(error){
       reject(error)
      }else{
       resolve(doc)
      }
      })
     })
     },
     find(data={}, fields=null, options={}) {
     return new Promise((resolve, reject) => {
      //model.find(需要查找的对象(如果为空,则查找到所有数据), 属性过滤对象[可选参数], options[可选参数], callback)
      UserModel.find(data, fields, options, (error, doc) => {
      if(error){
       reject(error)
      }else{
       resolve(doc)
      }
      })
     })
     },
     findOne(data) {
     return new Promise((resolve, reject) => {
      //model.findOne(需要查找的对象,callback)
      UserModel.findOne(data, (error, doc) => {
      if(error){
       reject(error)
      }else{
       resolve(doc)
      }
      })
     })
     },
     findById(data) {
     return new Promise((resolve, reject) => {
      //model.findById(需要查找的id对象 ,callback)
      UserModel.findById(data, (error, doc) => {
      if(error){
       reject(error)
      }else{
       resolve(doc)
      }
      })
     })
     },
     update(conditions, update) {
     return new Promise((resolve, reject) => {
      //model.update(查询条件,更新对象,callback)
      UserModel.update(conditions, update, (error, doc) => {
      if(error){
       reject(error)
      }else{
       resolve(doc)
      }
      })
     })
     },
     remove(conditions) {
     return new Promise((resolve, reject) => {
      //model.update(查询条件,callback)
      UserModel.remove(conditions, (error, doc) => {
      if(error){
       reject(error)
      }else{
       resolve(doc)
      }
      })
     })
     }
    }

    四、使用

    在/routers/index.js中使用

     
    var api = require(‘../lib/api‘);
    
    router.post(‘/login‘, function(req, res, next) {
     var user = {
     username : req.body.username,
     password: req.body.password
     };
     api.findOne(user)
     .then(result => {
      console.log(result)
     })
    })
    router.post(‘/sign_up‘, function(req, res, next) {
     var user = {
     username : req.body.username,
     password: req.body.password,
     email: req.body.email
     };
     api.save(user)
     .then(result => {
      console.log(result)  
     })
    })
    router.get(‘/user_list‘, function(req, res, next) {
     //返回所有用户
     api.find({})
     .then(result => {
      console.log(result)  
     })
     //返回只包含一个键值name、age的所有记录
     api.find({},{name:1, age:1, _id:0})
     .then(result => {
      console.log(result)  
     })
     //返回所有age大于18的数据
     api.find({"age":{"$gt":18}})
     .then(result => {
      console.log(result)  
     })
     //返回20条数据
     api.find({},null,{limit:20})
     .then(result => {
      console.log(result)  
     })
     //查询所有数据,并按照age降序顺序返回数据
     api.find({},null,{sort:{age:-1}}) //1是升序,-1是降序
     .then(result => {
      console.log(result)  
     })
    })

    Express+MongoDB步步为'赢'

    标签:维护   tps   model   data   create   div   pre   option   get   

    热心网友 时间:2022-04-09 21:08

    关于Express中的session
    Express中可以通过增加Connect的session中间件来开启对Session支持。其中至少包括以下几个步骤:
    1、首先需要引入connect-mongo模块

    1

    var MongoStore = require('connect-mongo')(express);

    (注:可能是版本的差异,在《Node.js开发指南》一书中使用的是var MongoStore = require('connect-mongo');,在我电脑是这将会导致Node报Cannot read property 'Store' of undefined)
    2、使用cookie处理中间件

    1

    app.use(express.cookieParser());

    3、使用Connect的session中间件

    1
    2
    3
    4
    5
    6

    app.use(express.session({
    secret: settings.cookieSecret,//设置加密字符串
    store: new MongoStore({
    db:'myapp' //将session存入myapp数据库中
    })
    }));

    4、移动路由处理中间件的位置

    1

    app.use(app.router);

    上面这段代码在Express创建项目时就会生成,主要用于显示地去处理路由,如果删去上述代码,Express也将会隐式地去处理路由。如果你已经显示的使用路由处理中间件你需要将上述代码的位置放在session处理中间件之后。否则在后续通过req.session去设置/读取session过程中你将会得到reg.session是undefined的提示/错误报告。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    无线生活台频道介绍 高赋码给产品做的“身份证”好吗? 包头市康钱工贸有限公司怎么样? 混凝土裂缝分类有哪些 混凝土裂缝种类及成因有哪些? 混凝土微观裂缝有哪些 水泥混凝土裂缝有哪些 智能制造工程专业要学哪些课程 智能制造工程大一学什么 智能制造工程专业主要学什么课程 ...想考一个计算机方面的证件,请问各位大侠我应该看什么书,考什么... 烧烤架是不锈钢烤的好还是铁的或者钢的 烧烤网用不锈钢的好还是搪瓷烤网的好? 烤肉的烤网有好坏之分吗 WIN7笔记本 玩游戏窗口化会被任务栏挡住一截··求解!!调分辨率无用!! 请问win7下大部分游戏窗口化时任务栏挡住窗口,不想隐藏任务栏,怎么能让窗口在前边啊 Dota2窗口化全屏怎么还显示下面的菜单栏?怎样设置才能让游戏窗口化全屏无下面的任务栏? 13米等于多少厘米? 13米标箱是什么意思 货车13米和13.7区别? 13米相当于什么东西 红米note10pro怎么打开无字模式 我用wallpaper下载了许多图片在gallery里面,用文件管理器如pc suite把这些图片导出,位置在哪里? 与《美丽心情》相似的调子的歌曲还有? 求美丽心情本多ruru的空间背景乐链接,谢谢啦 谁知道歌名,歌词只得二句,是才了解等待中的甜蜜或才明白这也是一种运气 求:歌曲美丽心情日语版的日文歌词,罗马拼音和中文歌词。~谢谢 求音乐:下载肚皮舞 美丽心情 美丽心情 和《美丽心情》曲子一样的歌曲 谁知道这首歌的名字,感激不尽 同样是可以内外同驱的药,大宠爱和博来恩哪个好呢? 大宠爱给猫咪驱虫后还需要做体内驱虫吗? 猫咪体内驱虫用什么药?有没有能体内外一起驱的呢? 猫咪用了大宠爱还需要体内驱虫吗 一个qq可以绑定几个? 一个qq可以绑定几个 猫咪的体内体外同时驱虫药,请问大宠爱和博来恩哪个好? 一个qq可以绑定多个吗? 一个qq可以绑定多个吗 猫猫需要驱虫吗?博来恩效果如何? 同一个人的手机号和qq号分别能申请两个吗? 做了大宠爱还用体内驱虫吗 猫体内和体外驱虫多久一次 QQ和微信如果绑定一共可以绑定几个几个QQ号? 家里猫猫要驱虫啦,博来恩好不好呀? QQ绑定的一个微信 ,还能绑定第二个么? 海底椰怎么煮软 海底椰做法 梦见老公把房子墙上挖了个洞然后又补好了 干锅鱿鱼的做法步骤图,干锅鱿鱼怎么做好吃