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 相关文章推荐
js实现连续英文字符自动换行兼容ie6 ie7和firefox
Sep 06 Javascript
JavaScript获取网页中第一个链接ID的方法
Apr 03 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
javascript数组常用方法汇总
Sep 10 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
JavaScript实现修改伪类样式
Nov 27 Javascript
vue+iview+less+echarts实战项目总结
Feb 22 Javascript
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
Nov 20 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
使用php4加速网络传输
2006/10/09 PHP
php桌面中心(四) 数据显示
2007/03/11 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
PHP应用JSON技巧讲解
2013/02/03 PHP
php curl选项列表(超详细)
2013/07/01 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
HTML DOM的nodeType值介绍
2011/03/31 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
python实现的各种排序算法代码
2013/03/04 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python温度转换实例分析
2018/01/17 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
python类共享变量操作
2020/09/03 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
捐款倡议书范文
2014/02/02 职场文书
体育节口号
2014/06/19 职场文书
化工工艺设计求职信
2014/06/25 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
清明扫墓感想
2015/08/11 职场文书