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静态作用域的功能。
Dec 25 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
Feb 26 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
Dec 04 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
Jan 26 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
Jul 15 Javascript
简单实现JavaScript弹幕效果
Aug 27 Javascript
JS自动生成动态HTML验证码页面
Jun 14 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
javascrpt密码强度校验函数详解
Mar 18 Javascript
ES6新增的数组知识实例小结
May 23 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 正则表达式常用函数
2014/08/17 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
编辑浪子版表单验证类
2007/05/12 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
Python中的面向对象编程详解(下)
2015/04/13 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python 字段拆分详解
2019/12/17 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Django:使用filter的pk进行多值查询操作
2020/07/15 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
区域销售经理岗位职责
2013/12/10 职场文书
致800米运动员广播稿
2014/02/16 职场文书
英文演讲稿开场白
2014/08/25 职场文书
员工试用期自我评价
2014/09/18 职场文书
公司离职证明范本
2014/10/17 职场文书
西安大雁塔导游词
2015/02/10 职场文书
2015年社区工作总结
2015/04/08 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js