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 上下滚动广告
Jun 17 Javascript
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
May 15 Javascript
IE关闭时判断及AJAX注销案例学习
Feb 18 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
js判断数组key是否存在(不用循环)的简单实例
Aug 03 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
Mar 04 Javascript
Node.js利用断言模块assert进行单元测试的方法
Sep 28 Javascript
尝试自己动手用react来写一个分页组件(小结)
Feb 09 Javascript
微信小程序排坑指南详解
May 23 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 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
php数组应用之比较两个时间的相减排序
2008/08/18 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PHP中绘制图像的一些函数总结
2014/11/19 PHP
php实现可运算的验证码
2015/11/10 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
用javascript实现画板的代码
2007/09/05 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
jQuery事件详解
2017/02/23 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
vue头部导航动态点击处理方法
2018/11/02 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
Python入门篇之数字
2014/10/20 Python
python 全局变量的import机制介绍
2017/09/07 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
工程质量承诺书范文
2014/03/27 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android