- Node操作Mysql数据库
首先进入到服务界面
启动MySQL
在项目文件中 配置package.json文件以及安装mysql
在Navicat for MySQL可视化软件中,连接本地数据库 并新建库以及表单数据
启动js文件
connection.query('SELECT * FROM `users`', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
});
因为还没有数据插入 显示为空 证明成功
插入数据 运行
connection.query('INSERT INTO users VALUES(NULL, "admin", "123456")', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
});
接着查询
connection.query('SELECT * FROM `users`', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
});
增删改查
connection.query('直接在这里写sql语句', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
});
- 获取回调
- 一种数据类型
- 参数
- 返回值
- 函数太灵活了,无所不能
- 一般情况下,把函数作为参数的目的就是为了获取函数内部的异步操作结果
- JavaScript 单线程、事件循环
function add(x, y) {
return x + y
}
// add(10, 20)
// console.log(1)
// // 不会等待
// setTimeout(function () {
// console.log(2)
// console.log('hello')
// }, 0)
// console.log(3)
function add(x, y, callback) {
console.log(1)
setTimeout(function () {
var ret = x + y
callback(ret)
}, 1000)
}
add(10, 20, function (ret) {
console.log(ret)
})
// 注意:凡是需要得到一个函数内部异步操作的结果
// setTimeout
// readFile
// writeFile
// ajax
// 这种情况必须通过:回调函数
- 封装ajax方法
<script>
// setTimeout
// readFile
// wirteFile
// readdir
// ajax
// 往往异步 API 都伴随有一个回调函数
// var ret = fn()
// $.get('dsadas', fucntion () {})
// var ret = $.get()
function get(url, callback) {
var oReq = new XMLHttpRequest()
// 当请求加载成功之后要调用指定的函数
oReq.onload = function () {
// 我现在需要得到这里的 oReq.responseText
callback(oReq.responseText)
}
oReq.open("get", url, true)
oReq.send()
}
get('data.json', function (data) {
console.log(data)
})
</script>
- 无法保证顺序的代码(promise)
var fs = require('fs')
//异步代码 不一定按顺序执行
fs.readFile('./data/a.txt', 'utf8', function (err, data) {
if (err) {
//return console.log('读取失败')
//抛出异常
// 阻止程序的执行
// 把错误消息打印到控制台
throw err
}
console.log(data)
})
fs.readFile('./data/b.txt', 'utf8', function (err, data) {
if (err) {
//return console.log('读取失败')
//抛出异常
// 阻止程序的执行
// 把错误消息打印到控制台
throw err
}
console.log(data)
})
fs.readFile('./data/c.txt', 'utf8', function (err, data) {
if (err) {
//return console.log('读取失败')
//抛出异常
// 阻止程序的执行
// 把错误消息打印到控制台
throw err
}
console.log(data)
})
- callback hell
嵌套 一定按照顺序进行执行
var fs = require('fs')
//异步代码 不一定按顺序执行
fs.readFile('./data/a.txt', 'utf8', function (err, data) {
if (err) {
//return console.log('读取失败')
//抛出异常
// 阻止程序的执行
// 把错误消息打印到控制台
throw err
}
console.log(data)
fs.readFile('./data/b.txt', 'utf8', function (err, data) {
if (err) {
//return console.log('读取失败')
//抛出异常
// 阻止程序的执行
// 把错误消息打印到控制台
throw err
}
console.log(data)
fs.readFile('./data/c.txt', 'utf8', function (err, data) {
if (err) {
//return console.log('读取失败')
//抛出异常
// 阻止程序的执行
// 把错误消息打印到控制台
throw err
}
console.log(data)
})
})
})
嵌套调用
var fs = require('fs')
console.log(1)
new Promise(function () {
console.log(2)
fs.readFile('./data/a.txt', 'utf8', function (err, data) {
if (err) {
console.log(err)
} else {
console.log(3)
console.log(data)
}
})
})
console.log(4)