Node.js连接MongoDB数据库产生的问题


Posted in Javascript onFebruary 08, 2017

NoSQL的代表MongoDB最近大受欢迎,虽然还有一些功能没有完善,但是并不影响它的大火。

Node.js是使用JavaScript 编写的可以运行在服务端的JS语言。

那么,二者碰撞会产生什么样的火花呢。

今天,我就以一个简单的例子介绍一下(在本地新建数据库文件并将其内容显示到浏览器窗体);

1.准备部分:所需要的工具IDE为WebStorm,MongoDB,Node.js。

1)首先需要下下载MongoDB并且配置环境变量(Path  指向安装目录)

第一步:建立MongDB服务输入命令 mongod.exe --bind_ip 127.0.0.1(本地IP地址) --logpath "D:\M_LOG\mongodb.l
og(日志文件所在地)" --logappend --dbpath "D:\M_DB(数据表所在地)" --port 27017(端口号)--serviceName " Mongod(服务名)" --serviceDisplayName "Mongods(显示的名称)" --install

第二步:命令行输入mongo 进入mongoDB环境;输入use dbtest(使用dbtest这个数据库,如果没有会自动创建新的数据库);

输入db.createCollection("表名字")创建表;

输入db.表名.insert({"key1":"value1","key2":"value2"});汇创建一条数据它并不是严格意义的数据库,所以允许多个不同的key存在;

输入db.表名.find();查看表里的数据

2)下载Node.js 一直下一步即可,它自动包含了一个包管理工具npm.

3)  使用WebStorm新建一个Node.js Express
APP 工程。

4)在WebStorm自带的命令行进入node_moudles目录下(cd node_moudles)下载的模块尽量放在此目录下。

输入npm install mongodb,下载Node.js连接MongoDB的所需模块。

5)在自带的命令行工具输入npm install ejs。下载ejs模板;

2.代码部分:

1)找到新建工程目录下的app.js,将模板替换为ejs模板

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs');

2)如果app.js没有监听端口的话则在最后加入

app.listen(3000);

3) 在项目的views文件夹下新建立三个测试用的ejs文件(新建html文件后缀改为.ejs)

index1.ejs

<!DOCTYPE html> 
<html> 
<head> 
  <title>my index</title> 
  <link rel='stylesheet' href='/stylesheets/style.css' /> 
</head> 
<body> 
<h1>Hello World</h1> 
<p>Welcome to</p> 
<p><a href="login" rel="external nofollow" >登陆</a></p> 
</body> 
</html> 
login.ejs
[html] view plain copy
<!DOCTYPE html> 
<html> 
<head> 
  <title>my login</title> 
  <link rel='stylesheet' href='/stylesheets/style.css' /> 
</head> 
<body> 
<h1>Hello World</h1> 
<p>Welcome to</p> 
<form action="ucenter" method="post"> 
  <p> 
    <span>name:</span> 
    <br> 
    <input id="name" name="name" type="text"> 
  </p> 
  <p> 
    <span>password:</span> 
    <br> 
    <input id="password" name="password" type="password"> 
  </p> 
  <p><input type="submit" value="submit"></p> 
</form> 
<form action="checkall" method="get"> 
  <input type="submit" value="全部"> 
</form> 
</body> 
</html>

checkinfo.ejs(重点 返回数据表信息)

<!DOCTYPE html> 
<html> 
<head> 
  <title>my checklist</title> 
  <link rel='stylesheet' href='/stylesheets/style.css' /> 
</head> 
<body> 
<%= datas %> 
<br/> 
<%= reason %> 
<br/> 
<%for(var i =0;i<datalist.length;i++){%> 
<ol> 
  <li><%=datalist[i]._id%></li> 
  <li> 
    <%= datalist[i].name %> 
    <%= datalist[i].like%> 
  </li> 
  <li> 
    <%= datalist[i].password %> 
    <%= datalist[i].age%> 
    <%= datalist[i].info%> 
  </li> 
</ol> 
<%}%> 
</body> 
</html>

4)在routes(学名路由)文件夹下中的index.js中做以下改变

var express = require('express'); 
var router = express.Router(); 
/* 
 var user = require('../bin/app2').user; 
 */ 
var mongo = require('mongodb');// 加载mogodb模块 
var DB_CONN_STR = 'mongodb://localhost:27017/testdb1';//数据库的地址 
/* GET home page. 处理请求信息*/ 
router.get('/', function (req, res, next) { 
  res.render('index1', {title: 'index1'}); 
}); 
/* login */ 
router.get('/login', function (req, res) { 
  res.render('login', {title: 'login'}); 
}); 
/*验证用户是否存在*/ 
var selectData = function (db, str, callback) { // 查找MongoDB是否含有相应的集合 
  //连接到表 
  var collection2 = db.collection('user'); 
  collection2.find(str).toArray(function (err, result) { 
    if (err) { 
      console.log('Error:' + err); 
      return; 
    } 
    callback(result); 
  }); 
} 
router.post('/ucenter', function (req, res) {  //为验证请求添加路由 
  var query = {name: req.body.name, password: req.body.password}; 
    mongo.connect(DB_CONN_STR, function (err, db) { 
      console.log("连接成功!"); 
      selectData(db, query, function (result) { 
        if (result != 0) { 
          console.log(query.name + ": 登陆成功 " + new Date()); 
          res.render('ucenter', {title: 'ucenter'});//跳转到指定页面 
        } else { 
          console.log(query.name + ": 登陆失败 " + new Date()); 
          res.redirect('/');//返回当前页面 
        } 
        db.close(); 
      }) 
    }); 
}); 
/*查找所有数据*/ 
router.get("/checkall",function (req,res) { 
  mongo.connect(DB_CONN_STR,function (err,db) { 
    var collection = db.collection('user'); 
    collection.find().toArray(function (err,result) { 
      if(err){ 
        console.log('ERROR'+err); 
        res.redirect('/'); 
        return; 
      } 
      console.log(result); 
      res.render('checkinfo',{ 
         datas:"Hello Noder" 
        ,datalist:result 
        ,reason:"由于你长得丑,服务器拒绝了你这次的访问" 
      }); 
      db.close(); 
    }); 
  }); 
}) 
module.exports = router;

3.废话这么多,重要出结果了

1)先看看MongoDB数据表里的数据

Node.js连接MongoDB数据库产生的问题

2)登录界面

Node.js连接MongoDB数据库产生的问题

3)登陆成功

Node.js连接MongoDB数据库产生的问题

4)网页返回全部数据

Node.js连接MongoDB数据库产生的问题

以上所述是小编给大家介绍的Node.js连接MongoDB数据库产生的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery图片预加载 等比缩放实现代码
Oct 04 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
javascript父、子页面交互技巧总结
Aug 08 Javascript
跟我学习javascript的var预解析与函数声明提升
Nov 16 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 Javascript
微信小程序  http请求封装详解及实例代码
Feb 15 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
javascript+css3开发打气球小游戏完整代码
Nov 28 Javascript
Vue波纹按钮组件制作
Apr 30 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
浅析Vue项目中使用keep-Alive步骤
Jul 27 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
简单实现bootstrap选项卡效果
Feb 08 #Javascript
Bootstrap导航条学习使用(一)
Feb 08 #Javascript
Vue过滤器的用法和自定义过滤器使用
Feb 08 #Javascript
Javascript中的神器——Promise
Feb 08 #Javascript
jquery获取下拉框中的循环值
Feb 08 #Javascript
Canvas + JavaScript 制作图片粒子效果
Feb 08 #Javascript
jQuery实现标签页效果实战(4)
Feb 08 #Javascript
You might like
phpstorm编辑器乱码问题解决
2014/12/01 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
JavaScript实现左右下拉框动态增删示例
2017/03/09 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
python搜索指定目录的方法
2015/04/29 Python
python回调函数中使用多线程的方法
2017/12/25 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python实现三次样条插值
2018/12/17 Python
Python中dict和set的用法讲解
2019/03/28 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python 处理文件的几种方式
2019/08/23 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
公司培训心得体会
2014/01/03 职场文书
共产党员公开承诺书
2014/03/25 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android