node笔记
- fs核心模块中的readFile,readDir
- http核心模块createServer,listen,on
- url核心模块url.parse 从路径中取出
- 服务端重定向
//301是永久重定向 单向性
res.statusCode = 302 //临时重定向
res.setHeader('Location',path) //设置重定向的路径
5.暴露规则
- 可以理解为在每一个模块中都有一个module对象
const module={ exports:{} }
然后module中有一个exports对象 ,然后在末尾return module.exports
,但是这个是在node底层的我们看不见- 在哪一个文件中require那个文件就会得到module.exports
- 但是平常我们还能见到这种写法
exports.
- 但是呢我们平常还可以用到这种写法
exports.a = 'hello nodejs'
那这种情况这个exports是什么?
- 其实在这里面还有一条语句
const exports = module.exports
同样这也是底层实现的 - 还有一种情况
exports = 'hello nodejs'
这个是不对的 因为最后return的是module.exports并不是exports
module.exports = 'hello nodejs'
exports.foo = 'helle' //这样的话会报错因为module.exports已经被改成了一个字符串,不是一个对象了。
6.require暴漏规则
- 优先从缓存加载
- 6.1.加载核心模块 核心模块其实也有对应的文件,由于node是开源的所以这个可以在github上查看源码在lib目录有这些文件 例如fs 、url、http等
require('fs) ....
- 6.2第三方模块 也就是我们平常npm的那些包,这个写法和核心模块的类似没有路径
require('jquery') ......
- 这中加载规则是为默认找node_modules这个目录,然后再在这个目录中找jquery这个目录,在这个目录下找到package.json中的main属性,main属性就记录了jQuery的入口js模块, 然后就会加载这个包,实际还是加载的文件。
- 如果没有package.json或则main中没有路径,index.js文件就是默认选择的文件,但是如果这个文件也没有运行时就会报错。
- !!! 重点 !!! 如果上面的一切都不成立,也就是说在此目录中没有找到node_modules,会默认在上一级目录中有没有这个node_modules,如此向上找知道查询到磁盘根目录,如果还没有找到则会报错 can‘t find module xxx
- 6.3 自己写的js文件加载
require('./index.js')
自己的js文件肯定是要把路径写上的,如果不写路径的话但是它也不是核心模块,也不是第三方的包,肯定是会报错的。