AMD 和 CMD+require 的模块加载机制

100 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天点击查看活动详情
一、谈谈你对 AMD 和 CMD 的理解
AMD:
AMD 推崇依赖前置,在定义模块的时候就要声明其依赖的模块同样都是异步加载模块,AMD 在加载模块完成后就会执行该模块,所有模块都加载执行完后会进入 require 的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。
CMD:
CMD 推崇就近依赖,只有在用到某个模块的时候再去 require
CMD 加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到 require 语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的。
特点:AMD 用户体验好,因为没有延迟,依赖模块提前执行了;CMD 性能好,因为只有用户需要的时候才执行。

二、node 怎么跟 MongoDB 建立连接
1)引入 mongoose
2)使用 mongoose.connect()方法连接到 MongoDB 数据库
3)监听连接是否成功
4)然后通过 node,书写接口,对数据库进行增删改查

三、请介绍一下 require 的模块加载机制
1)先计算模块路径
2)如果模块在缓存里面,取出缓存
3)加载模块
4)输出模块的 exports 属性即可

四、内置的 fs 模块架构是什么样子的
fs 模块主要由下面几部分组成:
1)POSIX 文件 Wrapper,对应于操作系统的原生文件操作
2)文件流 fs.createReadStream 和 fs.createWriteStream
3)同步文件读写,fs.readFileSync 和 fs.writeFileSync
4)异步文件读写, fs.readFile 和 fs.writeFile

五、express 中如何获取路由的参数
/users/:name 使用 req.params.name 来获取;
req.body.username 则是获得表单传入参数 username;
express 路由支持常用通配符 ?, +, *, and ()