//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);
});
});
如何使用nodejs去访问我们的mongodb数据库
最新推荐文章于 2024-07-29 11:44:18 发布