实现mongodb通讯

1 添加依赖项

"mongodb":"1.4.15",
"express-session": "1.9.1",
"connect-mongo": "0.4.1",
"connect-flash": "0.1.1"

其中connect-flash是用来记录登陆session消息的(不知道这样说对不对,因为还没仔细用上)

app.js

var express = require(‘express‘);
var path = require(‘path‘);
var favicon = require(‘serve-favicon‘);
var logger = require(‘morgan‘);
var cookieParser = require(‘cookie-parser‘);
var bodyParser = require(‘body-parser‘);

var routes = require(‘./routes/index‘);
var users = require(‘./routes/users‘);
var settings = require(‘./settings‘);
//

var app = express();

var session = require(‘express-session‘);
var MongoStore = require(‘connect-mongo‘)(session);
app.use(session({
    resave:false,
    saveUninitialized:true,
    secret: settings.cookieSecret,
    key: settings.db,//cookie name
    cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
    store: new MongoStore({
        db: settings.db,
        host: settings.host,
        port: settings.port
    })
}));

// view engine setup
app.set(‘views‘, path.join(__dirname, ‘views‘));
app.set(‘view engine‘, ‘ejs‘);
var flash = require(‘connect-flash‘);
app.use(flash());

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + ‘/public/favicon.ico‘));
app.use(logger(‘dev‘));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, ‘public‘)));

//app.use(‘/‘, routes);
//app.use(‘/users‘, users);
routes(app);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error(‘Not Found‘);
    err.status = 404;
    next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get(‘env‘) === ‘development‘) {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render(‘error‘, {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render(‘error‘, {
        message: err.message,
        error: {}
    });
});

module.exports = app;

index.js

var crypto = require(‘crypto‘),
    User = require(‘../models/user.js‘);

module.exports = function (app) {
    app.get(‘/‘, function (req, res) {
        res.render(‘index‘, {title: ‘主页‘});
    });
    app.get(‘/reg‘, function (req, res) {
        res.render(‘reg‘, {title: ‘注册‘});
    });

    app.get(‘/login‘, function (req, res) {
        res.render(‘login‘, {title: ‘登录‘});
    });
    app.post(‘/login‘, function (req, res) {
    });
    app.get(‘/post‘, function (req, res) {
        res.render(‘post‘, {title: ‘发表‘});
    });
    app.post(‘/post‘, function (req, res) {
    });
    app.get(‘/logout‘, function (req, res) {
    });
    app.post(‘/reg‘, function (req, res) {
        var name = req.body.name,
            password = req.body.password,
            password_re = req.body[‘password-repeat‘];
        //检验用户两次输入的密码是否一致
        if (password_re != password) {
            req.flash(‘error‘, ‘两次输入的密码不一致!‘);
            return res.redirect(‘/reg‘);//返回注册页
        }
        //生成密码的 md5 值
        var md5 = crypto.createHash(‘md5‘),
            password = md5.update(req.body.password).digest(‘hex‘);
        var newUser = new User({
            name: name,
            password: password,
            email: req.body.email
        });
        //检查用户名是否已经存在
        User.get(newUser.name, function (err, user) {
            if (err) {
                req.flash(‘error‘, err);
                return res.redirect(‘/‘);
            }
            if (user) {
                req.flash(‘error‘, ‘用户已存在!‘);
                return res.redirect(‘/reg‘);//返回注册页
            }
            //如果不存在则新增用户
            newUser.save(function (err, user) {
                if (err) {
                    req.flash(‘error‘, err);
                    return res.redirect(‘/reg‘);//注册失败返回主册页
                }
                req.session.user = user;//用户信息存入 session
                req.flash(‘success‘, ‘注册成功!‘);
                res.redirect(‘/‘);//注册成功后返回主页
            });
        });
    });
};

setting.js (根目录)

/**
 * Created by Administrator on 2015/3/31.
 */

module.exports = {
    cookieSecret: ‘myblog‘,
    db: ‘blog‘,
    host: ‘localhost‘,
    port: 27017
};

 db.js (models

/**
 * Created by Administrator on 2015/3/31.
 */
var settings = require(‘../settings‘),
    Db = require(‘mongodb‘).Db,
    Connection = require(‘mongodb‘).Connection,
    Server = require(‘mongodb‘).Server;
module.exports = new Db(settings.db, new Server(settings.host, settings.port),
    {safe: true});

user.js(models)

/**
 * Created by Administrator on 2015/3/31.
 */
var mongodb = require(‘./db‘);

function User(user) {
    this.name = user.name;
    this.password = user.password;
    this.email = user.email;
};

module.exports = User;

//存储用户信息
User.prototype.save = function(callback) {
    //要存入数据库的用户文档
    var user = {
        name: this.name,
        password: this.password,
        email: this.email
    };
    //打开数据库
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);//错误,返回 err 信息
        }
        //读取 users 集合
        db.collection(‘users‘, function (err, collection) {
            if (err) {
                mongodb.close();
                return callback(err);//错误,返回 err 信息
            }
            //将用户数据插入 users 集合
            collection.insert(user, {
                safe: true
            }, function (err, user) {
                mongodb.close();
                if (err) {
                    return callback(err);//错误,返回 err 信息
                }
                callback(null, user[0]);//成功!err 为 null,并返回存储后的用户文档
            });
        });
    });
};

//读取用户信息
User.get = function(name, callback) {
    //打开数据库
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);//错误,返回 err 信息
        }
        //读取 users 集合
        db.collection(‘users‘, function (err, collection) {
            if (err) {
                mongodb.close();
                return callback(err);//错误,返回 err 信息
            }
            //查找用户名(name键)值为 name 一个文档
            collection.findOne({
                name: name
            }, function (err, user) {
                mongodb.close();
                if (err) {
                    return callback(err);//失败!返回 err 信息
                }
                callback(null, user);//成功!返回查询的用户信息
            });
        });
    });
};

)

时间: 2024-10-10 03:43:41

实现mongodb通讯的相关文章

开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上,暂时全名:ServerSuperIO.WinIOT(以后可能还会移植到Ubuntu上).以后可以把ServerSuperIO框架应用到嵌入式设备上,移植的成功具有标志性意义,意味着软件和硬件的结合,软硬的结合才具有更强的生命力.为什么我特别愿意干这件事呢?源于我对以前工作的总结,如下图: 二.如果利

《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活

参考文章: 1.SuperIO通讯框架介绍,含通信本质 一.感慨 上大学的时候,没有学过C#,花了5块钱在地坛书市买了一本教程,也就算是正式入行了.后来深造,学过JAVA,后来迫于生计,打算转JAVA了.后来考虑考虑,自己写的框架还是有很大发展余地,后来还是在C#的阵地上坚持了下来.从一开始的雏形,到SuperIO的产品化,再到服务器端的ServerSuperIO,也是慢慢演化而来.后期打算把ServerSuperIO移植到嵌入式设备上,以及完善开发文档.本来不想提这些,但是今天打算招一个C#开

安装MongoDB(做成Windows服务)并加载C#驱动程序

一 Mongodb简介: 通过查询网上的一些信息来介绍一下Mongodb的优势:MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL.在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点: 1  使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法.针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现.相对于SQL来说,更加直观

物联网建设中通讯互联层的终极解决方案

1.自我介绍 本人已经工作10年,一直在工业领域.在一线干过实施,下过矿井:干过项目,带过团队:干过软件研发,出过产品:干过项目群管理,售前和市场也接触过:期间在纯软件公司也干过将近两年的时间,熟悉软件开发流程与管理.虽然没有取得多大成绩,也算经历丰富了. 互联网“行业”如火如荼的发展,曾经也想过转行去做“互联网”,奈何犹豫太久,已然提不起太多兴趣.凭借当年的沉淀与积累,有个半成品的框架,在工作索然无味的情况下,毫不犹豫的投身到物联网框架的开发与产品化的进程中.别人都说物联网的时代来了,如果真的

《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发一套设备驱动,同时支持串口和网络通讯. <连载 | 物联网框架ServerSupe

Mongodb中Sharding集群

随着mongodb数据量的增多,可能会达到单个节点的存储能力限制,以及application较大的访问量也会导致单个节点无法承担,所以此时需要构建集群环境,并通过sharding方案将整个数据集拆分成多个更小的chunk,并分布在集群中多个mongod节点上,最终达到存储和负载能力扩容.压力分流的作用.在sharding架构中,每个负责存储一部分数据的mongod节点称为shard(分片),shard上分布的数据块称为chunk,collections可以根据“shard key”(称为分片键)

Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。

本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加大.本博加以整理,并且实践. 所用核心技术选型: Tomcat + Spring 4.0.3 + Mongodb(高并发数据库) + SpringQueue(消息队列)+ ActiveMQ (消息队列) + Spring-data-Mongo + Servlet 3.0 +Spring-Websoc

C#工业物联网和集成系统解决方案的技术路线(数据源、数据采集、数据上传与接收、ActiveMQ、Mongodb、WebApi、手机App)

目       录 工业物联网和集成系统解决方案的技术路线... 1 前言... 1 第一章           系统架构... 3 1.1           硬件构架图... 3 1.2           组件构架图... 4 第二章           技术选型与介绍... 5 2.1           开发环境... 5 2.2           数据源... 5 2.3           数据采集... 5 2.4           数据上传服务... 6 2.5      

MONGODB全面总结

关于Mongodb的全面总结,学习mongodb的人,可以从这里开始! 分类:            MongoDB2013-06-08 09:5610213人阅读评论(0)收藏举报 目录(?)[+] BSON 效率 传输性 性能 写入协议 数据文件 名字空间和盘区 内存映射存储引擎 其他 MongoDB的架构 MongoDB的特点 MongoDB的功能 MongoDB的局限性与不足 适用范围 MongoDB的不适用范围 要点 MongoDB分布式复制 MongoDB语法与现有关系型数据库SQL