如何使用nodejs去访问我们的mongodb数据库

//1.如何使用nodejs去访问我们的mongodb数据库?
//   1.新启动一个webservice服务器
     var http = require('http');
     //3.引入url模块 对前端的请求进行识别
     var url = require('url');
     //可以将指定的字符串转换为json对象
     var qs = require('querystring');
//   qs.parse()
     var getUser = require('./db.js')[0];
//   2.创建服务
     http.createServer(function(request,response){

               response.writeHead('200',{'Content-Type':'application/json;charset=utf-8',
              'Access-Control-Allow-Origin':'*'});

          //获取访问对象
          var _url = request.url;
          console.log(_url);
          var _path = url.parse(_url).pathname;//获取请求地址
          console.log(_path);
          //4.定义一个标准/users 访问mongodb
          switch(_path){
              case "/user":
              //当浏览器输入user页面时,调用db.js里的getUser方法,获取里面的数据
              //查询ID为009的用户信息  1.设计一个新的接口 请求路径 /userbyid
              //2.在switch中判断拦截
              //3.在db.js里面实现一个新的查询方法得到数据
                   var _search = url.parse(_url).search;
                   var options = {};
//                 给json动态赋值
//                 options[数组[0]] = 数组[1]值
//                 ?/user?age=30&username=b
//                 find({age=30&username=b})才能拿到
                   if(_search==null){
                        console.log("查询全部");
                        options={};
                   }else{
                        console.log("查询单个");//  /userId=1008
                        //options-->{"userId":"1008"}
                        var _ns = _search.substring(1,_search.length);
                         _ns = qs.parse(_ns);
                        console.log(_ns);
                        options = _ns;
                   }

                   console.log("访问mongodb数据库");
                   getUser(options,function(callback){
                        response.write(JSON.stringify(callback));
                        response.end();
                   });
              break;
              case "/userbyid":
                   var jsons = '{"userid":"009","username":"admins"}';
                   response.write(jsons);
                   response.end();
                   //问题:
                   //1.不同命名是不是问题?
                   //2.这样去设计让每个接口功能单一的、接口复用性很低
                   //设计  将查询全部数据  和  查询单个数据的接口都放在/user 接口里面
                   //核心问题:/user识别 我到底想查询单个还是查询全部数据
//                 查询全部的接口  /user
//                 查询单个接口     /user?userid=1009
//                 1.也就是无论用户发/user||/user?userid=1009 请求都可以被switch里面的选择分支拦截到
//                 2.判断get请求里面的search是否存在,如果存在查询单个,如果不存在查询全部
              break;
              case "/login":
              //1.获取post里面的数据
                   var _data = '';
              //2.request.addListener();进行获取post提交的数据
              //表示的是监听data事件,只要有了数据,回调函数里就会出现值。
                    request.addListener('data',function(data){
                        _data+=data;//目前每次拿到的data都是单个字符
                        //得到完整的字符串
                   });
                   //数据接收完毕
                   request.addListener('end',function(data){
                        console.log(_data);
                        var ops = qs.parse(_data);
                        console.log(ops);
                        var message = {};
                        getUser(ops,function(res){
                             if(res.length==0){
                                  message.status = "false";
                                  message.desc = "用户名密码错误";
                                  message.time = "2016/09/09";
                             }else{
                                  message.auth = "合法用户";
                                  message.status = "true";
                                  message.desc = "登陆成功";
                                  message.role = "admin";
                             }
                             response.write(JSON.stringify(message));
                             response.end();
                        })
//                      find({username:"",password:""});
                   });
                   console.log("this is login api");
              break;
              case "/goods":
                   console.log("只给定假json");
              break;
              case "/favicon.ico":
              break;

              //火狐浏览器里面插件 rest poster,rest api工具
          }
     //5.需要通过npm 去下载一个nodejs访问mongodb的插件
     //npm install mongodb --save-dev   局部
//     6.新建db.js在db.js里面去访问我们的mongdb
     //response.end();
     }).listen(3080);
    



db.js里面去访问我们的mongdb

     getUser  是case "/user":的时候,输出的数据。
     getGoods  是 case "/goods":的时候输出的数据。
只要写入不同的接口或者数据给他们返回就可以了。
//1.回调的意义就是在访问数据库成功的时候,将数据回传出来
/**db层的实现**/
var getUser = function(options,callback){
     //实现的具体步骤
     //1.引入支持node访问mongodb插件
     var mongodb = require('mongodb');
     //2.获取与数据库服务器的连接   new mongodb.Server(ip,port,options)
     var server = new mongodb.Server('127.0.0.1',27017,{auto_connection:true});
     //3.通过连接获取数据库实例  new mongodb.Db('数据库名称',获取与数据库连接对象,安全策略)
     var appdb = new mongodb.Db('app_db',server,{safe:true});
     //4.打开mongodb数据库
//   open(function(err,实例){
//
//   });
     appdb.open(function(err,appdb){
          if(!err){
              //5.进行下一步的操作,打开存储数据的集合
              //appdb.collection('数据库的名称||集合的名称',安全策略,function(){})
               appdb.collection('app_db',{safe:true},function(err,collection){
                   if(!err){
                        //6.在collection里面去获取数据
                        collection.find(options).toArray(function(err,doc){   //find中可以根据条件查询
                             //7.数据将放进callback里面
                             if(!err){
                                  callback(doc);
                             }
                        });
                   }
              });
          }
     });
}
var getGoods = function(callback){

}
module.exports = [getUser,getGoods];

html输入框

<div>
              用户名:<input id="username"><br/>
              密码:<input id="password"><br/>
              <button id="btn">登录</button>
          </div>
          <script type="text/javascript">
          //1.什么时候开始访问登录接口?
          var _service = "http://127.0.0.1:3080/login";
          $("#btn").click(function(){
              var _u = $("#username").val();
              var _p = $("#password").val();
              var _json = {username:_u,password:_p};
              //2.触发登录的时候随着哪些变化?
              $.post(_service,_json,function(data){
                   console.log("服务端给我们的状态值");
                   console.log(data);

              });
          });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值