回调函数
函数也相当于一种数据类型,可以当做参数进行传递,也可以当做方法的返回值
函数作为参数可以获取函数内部的异步操作结果
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
-
使用官方的包进行操作
-
使用第三方mongoose来操作(它是对MongoDB的官方包进行了再封装)