热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Node.js操作mongodb数据库

准备:安装Node.js,mongodb,mongoose,webstorm这里我采用的是mongoose来处理的。Mongoose是MongoDB的一个对象模型工具,可以工作于异步环境下。

准备:安装Node.js,mongodb,mongoose,webstorm

这里我采用的是mongoose来处理的。Mongoose是MongoDB的一个对象模型工具,可以工作于异步环境下。具体学习内容参看官网http://mongoosejs.com/docs/index.html

1、开始运用mongoose时,得先安装,打开命令行,执行$ npm install mongoose

2、连接mongodb数据库,在app.js里面添加如下两行代码。

var mOngoose= require('mongoose');
mongoose.connect('mongodb://localhost/test'); //连接到一个test的数据库
操作到这里基本上是个人都会,不过接下来具体如何进行数据库的操作,在没有实例的情况下还是有点纠结的。我这里以一个登录注册为例来说明如何使用。

3、用webstorm创建一个新的Express App项目,这样就直接封装好了express(),省去了自己写的麻烦。然后修改app.js如下:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , mOngoose= require('mongoose'); //1


var app = express();


// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));


// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}


app.get('/', routes.index);
app.get('/log',routes.login);
app.post('/log',routes.doLogin);
app.get('/reg',routes.reg);
app.post('/reg',routes.doReg);


//mongoose
mongoose.connect('mongodb://localhost/test_db'); //2


http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

4、接下来定义一下Schema和Model,这些就是数据库表的结构。在项目根路径下创建一个models的文件夹,里面添加一个user.js用来定义用户表。models/user.js代码如下。

var mOngoose= require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var UserSchema = new Schema({
name: String
, password: String
});

module.exports = mongoose.model('User', UserSchema);
注意最后一行,这里是直接把UserSchema的Model给导出去了,也可以直接导出UserSchema,module.exports = UserSchema,不过这样做的话,再用这个表信息的时候就得单独Model一下。

5、引入mongoose后,自己添加相应的文件,在view里新建登录注册页,头部底部这些包含文件也都自己建。先说注册页,表单处理路径为/reg。注意用户名密码的输入框我是直接用name="user[]"这种形式,这样后面可以直接通过这个user来获取相关信息,其实不这样也可以。
<% include header.ejs %>





<% include footer.ejs %>
接下来修改doReg方法,这是处理注册事件的函数。

6、修改index.js,因为想在这里注册时候把数据存入到数据库中,所以这里需要引用上面第四步创建的model。具体代码如下所示。

var User = require('../models/user');
/*
 * GET home page.
 */


exports.index = function(req, res){
  User.find({}, function (err,users) {
      res.render('index', { title: 'Express',users:users });
  });
};

exports.reg=function(req,res){
    res.render('reg',{title:'Register Page'});
};
exports.doReg=function(req,res){
    var user = new User(req.body.user);
    user.save(function (err, user) {
        if(!err) {
            console.log(user);
            res.redirect('/')
        }
    });
    console.log(req.body.user);
};
这一步要注意为什么是req.body.user,这里就是前面写页面直接用user[]这种形式带来的好处,如果单独写name="username",那么这里就应该是下面这种形式。
var user = new User({
name:req.body['username'],
password:req.body['password']
});
user.save就是把刚才数据提交到数据库,具体使用方法参看官方文档。save成功之后执行什么操作就自己发挥吧。保存之前也可以进行一些简单的表单验证等等。

7、通过登录来讲如何从数据库取出数据,继续修改index.js,如下所示。

var User = require('../models/user');
/*
* GET home page.
*/

exports.index = function(req, res){
User.find({}, function (err,users) {
res.render('index', { title: 'Express',users:users });
});
};
exports.login=function(req,res){
res.render('log',{title:'Login Page'});
} ;
exports.doLogin=function(req,res){
var user = req.body.user;
User.find(user,function(err,docs){
if(!err){
if(docs!=''){
console.log(docs);
return res.redirect('/');
} else{
console.log('用户名或密码不正确');
return res.redirect('/log');
}

}else{
console.log("Something happend.");
}
})
};
exports.reg=function(req,res){
res.render('reg',{title:'Register Page'});
};
exports.doReg=function(req,res){
var user = new User(req.body.user);
user.save(function (err, user) {
if(!err) {
console.log(user);
res.redirect('/')
}
});
console.log(req.body.user);
};
这里通过find()方法来查询数据库,使用方法不解释了。第一个参数user就是要查询的数据,从输入框获取过来的,如果不是用user[]这种形式定义的name属性,那么这里一样的用{naem:req.body['username'],password:req.body['password']}这样的写法。回调函数docs就是从数据库查询返回的结果。

例子到此结束。



推荐阅读
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • MongoVUE基础操作指南:轻松上手数据库管理
    本文介绍了MongoVUE的基础操作,旨在帮助用户轻松掌握数据库管理技巧。MongoVUE是一款功能强大的MongoDB客户端工具,虽然需要注册,但其用户友好的界面和丰富的功能使其成为许多开发者的首选。文中详细解释了安装步骤、基本配置以及常见操作方法,并对一些常见的问题进行了修正和补充,确保用户能够快速上手并高效使用MongoVUE进行数据库管理。 ... [详细]
  • 本文介绍了一个使用mii-tool工具检查网络接口状态的Bash脚本,并将结果记录到日志文件中。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • Spring Boot使用AJAX从数据库读取数据异步刷新前端表格
      近期项目需要是实现一个通过筛选选取所需数据刷新表格的功能,因为表格只占页面的一小部分,不希望整个也页面都随之刷新,所以首先想到了使用AJAX来实现。  以下介绍解决方法(请忽视 ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 使用 jQuery 实现页面加载进度条
    页面加载进度条是提升用户体验的重要工具,通过在页面头部显示一个加载状态,并在页面完全加载后隐藏,可以有效减少用户的等待焦虑。本文将详细介绍如何使用 jQuery 实现这一功能。 ... [详细]
  • 树莓派4B:安装基础操作系统指南
    本文将详细介绍如何为树莓派4B安装基础操作系统,包括所需材料、镜像下载、镜像烧录以及更换国内源等步骤。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • MongoDB 默认使用哪个端口?—— MongoDB 教程详解
    MongoDB 在默认配置下监听的端口是 27017,用户在连接数据库时通常会使用此端口进行各种操作,包括数据插入、查询和更新等。除了 27017 端口外,MongoDB 还支持其他配置选项,以满足不同的应用场景和安全需求。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
author-avatar
手机用户2502928203
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有