Node.js-4
知识点
callback是不是相当于函数自调用?
AMD
- PHP 中为什么就可以直接
require
、include
因为 PHP 当初在设计的时候就加入了这个功能 - PHP 这门语言天生就支持
- 模块作用域
- 可以使用 API 来进行文件与文件之间的依赖加载
- 在 Node 这个环境中对 JavaScript 进行了特殊的模块化支持 CommonJS
- JavaScript 天生不支持模块化
- require
- exports
- Node.js 才有的
- 在浏览器中也可以像在 Node 中的模块一样来进行编程
<script>
标签来引用加载,而且你还必须考虑加载的顺序问题- require.js 第三方库 AMD
- sea.js 第三方库 CMD
- 无论是 CommonJS、AMD、CMD、UMD、EcmaScript 6 Modules 官方规范
- 都是为了解决 JavaScript 的模块化问题
- CommonJS、AMD、CMD 都是民间搞出来的
- EcmaScript 是官方规范定义
- 官方看民间都在乱搞,开发人员为了在不同的环境使用不同的 JavaScript 模块化解决方案
- 所以 EcmaScript 在 2015 年发布了 EcmaScript 2016 官方标准
- 其中就包含了官方对 JavaScript 模块化的支持
- 也就是说语言天生就支持了
- 但是虽然标准已经发布了,但是很多 JavaScript 运行换将还不支持
- Node 也是只在 8.5 版本之后才对 EcmaScript 6 module 进行了支持
- 后面学 Vue 的时候会去学习
- less 编译器 > css
- EcmaScript 6 -> 编译器 -> EcmaScript 5
- 目前的前端情况都是使用很多新技术,然后利用编译器工具打包可以在低版本浏览器运行。
- 使用新技术的目的就是为了提高效率,增加可维护性
- PHP 中为什么就可以直接
npm init –yes 生成一个package.json 文件 npm –save 文件名 又生成一个package-lock.json文件,又生成的文件和初始化生成的文件有区别吗?
- 当你安装包的时候,新版的 npm 还会自动生成一个文件:package-lock.json
为什么模板引擎在app.js中引入之后在router.js中不引入可以直接使用,而express还需要在router.js中再引入一次 app.js中路由器挂载不是很懂 router.js中为什么要创建一个路由器容器,不知道作用是干什么的 es6中的find方法不是很懂
- 中间件
- EcmaScript 6 的 find 方法
文件路径中的
/
和模块标识中的/
Express 中配置使用 art-template 模板引擎
Express 中配置使用 body-parser
Express 中配置处理静态资源
CRUD 案例中单独提取路由模块
回调函数
- 异步编程
- 如果需要得到一个函数内部异步操作的结果,这是时候必须通过回调函数来获取
- 在调用的位置传递一个函数进来
- 在封装的函数内部调用传递进来的函数
find、findIndex、forEach
- 数组的遍历方法,都是对函数作为参数一种运用
- every
- some
- includes
- map
- reduce
- 数组的遍历方法,都是对函数作为参数一种运用
package-lock.json 文件的作用
- 下载速度快了
- 锁定版本
JavaScript 模块化
- Node 中的 CommonJS
- 浏览器中的
- AMD require.js
- CMD sea.js
- EcmaScript 官方在 EcmaScript 6 中增加了官方支持
- EcmaScript 6
MongoDB 数据库
- MongoDB 的数据存储结构
- 数据库
- 集合(表)
- 文档(表记录)
- MongoDB 的数据存储结构
MongoDB 官方有一个 mongodb 的包可以用来操作 MongoDB 数据库
- 这个确实和强大,但是比较原始,麻烦,所以咱们不使用它
mongoose
- 真正在公司进行开发,使用的是 mongoose 这个第三方包
- 它是基于 MongoDB 官方的 mongodb 包进一步做了封装
- 可以提高开发效率
- 让你操作 MongoDB 数据库更方便
链接MySQL
var mysql = require('mysql');
// 1. 创建连接
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'users' // 对不起,我一不小心把数据库名字和表名起成一样的,你知道就行
});
// 2. 连接数据库 打开冰箱门
connection.connect();
// 3. 执行数据操作 把大象放到冰箱
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);
// });
// 4. 关闭连接 关闭冰箱门
connection.end();