一.链接到数据库–connect
-
mongoose
用来操作mongodb
数据库的模块.使用require加载模块
const mongo = require('mongoose');
-
链接到MongoDB server–connect连接
标准语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// 这是固定格式必须要指定
- username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试去登录这个数据库
- host1(主机) 必须指定至少一个host,host1是这个URL唯一要填写的.它指定了连接服务器的地址.如果要连接复制集,请指定多个主机地址.
- portx 可选的指定端口,如果不填默认27017
- /database 如果指定username:password@,连接并验证登录指定的数据库.若不指定,默认打开test数据库.
- ?options 是连接选项.如果不使用/database,则前边需要加上/.所有连接选项都是键值对name=value,键值对之间通过&或者;(分号)隔开.
实例:首先确定mongoose模块已经下载,并且已经使用ruquire加载了
- mongo==>mongoose,上边已经引用了
- connect:链接
- mongodb://127.0.0.1:27017/stu:创建一个名字叫stu的数据库
- function:链接完成之后的回调函数
mongo.connect('mongodb://127.0.0.1:27017/stu',function(){
console.log("链接完成");
})
这时链接成功了但是会出现两个警告
-
第一个警告是 deprecationwarning:当前URL字符串分析器已弃用,将在将来的版本中删除。要使用新的解析器,请将选项{usenewurlparser:true}传递给mongoclient.connect。
- 前边的翻译可以不用看,解决方案就是在连接中加入{useNewUrlParser: true}.
-
第二个警告 弃用警告:当前服务器发现和监视引擎已弃用,将在将来的版本中删除。要使用新的服务器发现和监视引擎,请将选项{useUnifiedTopology:true}传递给mongoclient构造函数。
- 解决方案在连接中加入useUnifiedTopology: true }
-
解决之后的代码:
mongo.connect('mongodb://127.0.0.1:27017/stu',{ useNewUrlParser: true , useUnifiedTopology: true ,useCreateIndex:true},function(){ console.log("链接完成");});
虽然数据库连接成功也创建了stu数据库,但是这时打开数据库发现并没有stu这个库.原因是因为数据库还没有数据,要往里边添加数据才能显示
二.将mongoose内置的promise对象手动修改为ES6的promise对象
mongo.Promise = global.Promise;//promise诺言
-
为什么要修改成ES6的promise的对象哪,我们打开官网可以查看.官网中已经说明在不就的将来将废弃掉,如果想用就用ES6的.无论后边对数据库做什么操作,只要没链接成功,程序就会进入暂停状态.
-
什么是promise?
- promise是异步编程的解决方法.
- 从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本质上讲,它是一种承诺,承诺它过段时间会给你一个结果.
- promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
-
promise的作用:用来解决两个问题
-
多个回调函数,常常第一个函数的输出是第二个函数的输入这个现象
请求1(function(请求结果1){ 请求2(function(请求结果2){ 请求3(function(请求结果3){ 请求4(function(请求结果4){ 请求5(function(请求结果5){ 请求6(function(请求结果3){ ... }) }) }) }) }) })
-
promise可以支持多个并发的请求,获取并发请求中的数据
-
三.获取默认的链接数据库对象
const db = mongo.connection;//const定义一个值不可改变的量,connection默认链接的数据库
四.判断链接是否成功
db.on('error',function(err){
if(!err){
console.log('链接成功');
}else{
console.log('链接失败');
}
})
五.代码
//mongoose--用来操作mongodb数据的模块
let mongo = require('mongoose');
//一.链接MongoDB server
// mongo.connect('mongodb://user:password@ip/dbname');
mongo.connect('mongodb://127.0.0.1:27017/stu',{ useNewUrlParser: true , useUnifiedTopology: true},function(){
console.log("链接完成");
});//callback链接完成之后的函数
//二.将mongoose内置的Promise对象手动修改成使用ES6的Promise对象
mongo.Promise = global.Promise;//promise诺言
//三.获取默认的链接数据库对象
const db = mongo.connection;//const定义一个值不可改变的量,connection默认链接的数据库
//四.判断链接是否失败
db.on('error',function(err){
if(!err){
console.log("链接成功");
}
else{
console.log("链接失败");
}
});