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 Ajax使用 全解析
Dec 15 Javascript
常用一些Javascript判断函数
Aug 14 Javascript
js setTimeout opener的用法示例详解
Oct 23 Javascript
jquery实现select选中行、列合计示例
Apr 25 Javascript
JavaScript获取文本框内选中文本的方法
Feb 20 Javascript
jQuery siblings()用法实例详解
Apr 26 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
Angular实现的table表格排序功能完整示例
Dec 22 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
vue axios 表单提交上传图片的实例
Mar 16 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 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生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
Python生成随机MAC地址
2015/03/10 Python
Python批量转换文件编码格式
2015/05/17 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
Python实现对adb命令封装
2020/03/06 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
小学教师的个人自我鉴定
2013/10/24 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
民间借贷借条范本
2015/05/25 职场文书
小学毕业感言200字
2015/07/30 职场文书
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers
python基础之//、/与%的区别详解
2022/06/10 Python