回调函数和mongoDB笔记

回调函数

函数也相当于一种数据类型,可以当做参数进行传递,也可以当做方法的返回值

函数作为参数可以获取函数内部的异步操作结果

Javascript的特点

  • 单线程
  • 事件循环

js会执行完所有的普通函数 才会去执行异步api 如setTimeout()就算不传第二个参数去控制执行时间, setTimeout()函数也是最后才执行.

以下是没有回调函数的函数执行情况

function add(x, y){
  console.log(1)
  setTimeout(function (){
    console.log(2)
    var ret = x + y
    return ret
  }, 1000)
  console.log(3)
  //函数执行到这里就结束,不会等待中间的定时器的返回
}
console.log(add(10, 20))
// 函数直接结束,其中的ret并没有进行处理,所以会直接返回默认值undefined

凡是需要得到一个函数内部异步操作的结果

  • setTimeout
  • readFile
  • writeFile
  • ajax

以下是有回调函数的情况

function add(x, y, callback){
  //var x = 10
  //var y = 20
  //var callback = function (ret){xxxx对ret进行处理xxxx}
  //相当于这里有以上代码
  setTimeout(function(){
    var ret = x + y
    callback(ret)
  }, 1000)
  //异步api程序不会等待,所以这里的ret不能直接返回,需要用callback函数来接收这个变量
}
add(x, y, function (ret){
  console.log(ret)
  //这样就解决异步问题,函数中异步操作的变量被取出,在这个函数中就可以对变量进行处理
.})

异步的api常常伴随一个回调函数

var ret = get()

PHP直接就可以require include,因为他设计之初就支持模块化

  • 有模块作用域
  • js天生就不支持模块化

    • require
    • exports
    • nodejs才有
      • node对js进行了特殊的模块化支持 CommonJS
  • 在浏览器中也可以和node模块中的形式来编程

    • <script>标签来引用加载,还需要考虑加载的顺序问题
    • require.js 第三方库 AMD规范
    • sea.js 第三方库 CMD规范
  • 无论是CommonJS AMD cmd umd EcmaScript 6 Modules 官方规范

    • 都是为了解决js模块化问题
    • commonJS AMD CMD 都是民间
    • ecmascript是官方规范

MongoDB

关系型数据库和非关系型数据库

表就是关系
或者表与表之间存在关系

  • 所有的关系型数据库都需要通过SQL语言操作

  • 所有关系型数据库都需要在操作之前设计表结构

  • 而且数据表还支持约束

    • 唯一的
    • 主键
    • 默认值
    • 非空
  • 非关系数据库非常灵活

  • 有的非关系型数据库就是 key-value 对儿 (一个键对应一个值

  • MongoDB是长得最像关系型数据库的非关系型数据库

  • 关系型数据库 -> MongoDB

    • 数据库 -> 数据库
    • 数据表 -> 集合(数组)
    • 表记录 -> (文档对象)
  • mongoDB不需要设计表结构

    • 也就是说可以任意向其中添加数据,没有结构性

mongoDB的开启和关闭

mongoDB 默认使用执行mongo命令所处盘符根目录下的 /data/db 作为自己的数据存储目录

所以在执行该命令之前需要在根目录新建一个 /data/db
然后输入命令mongod 即可开启

想修改默认的数据存储目录

mongod --dbpath=新存储路径

按 ctrl + c停止服务 和nodejs类似

连接数据库

mongo
# 默认连接本机的mongoDB服务

exit
# 断开与本机mongoDB的连接

mongoDB基本命令

  • show dbs

    • 查看显示全部数据库列表
      输入以上命令的时候会出现 admin 和 local , config ,这是系统数据库别动
  • db

    • 查看当前操作的数据库
  • use database名称

    • 切换到指定数据库 (如果没有会进行新建数据库)(但是在列表中没有实际创建)
  • db.students.insertOne({“name”: “Jack”})

    • 插入key-value对儿
  • show collections

    • 展示当前数据库的所有集合
  • db.students.find()

    • 查询当前集合的所有值

    db.students.find()

> db.users.find()
{ "_id" : ObjectId("601abb69966010404028a02f"), "username" : "admin", "password" : "123456", "Email" : "admin@admin.com", "__v" : 0 }

{ “_id” : ObjectId(“601a9905b7ccc6fb450812ab”), “name” : “Jack” }

如何在node中操作 mongoDB

  1. 使用官方的包进行操作

  2. 使用第三方mongoose来操作(它是对MongoDB的官方包进行了再封装)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值