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文件肯定是要把路徑寫上的,如果不寫路徑的話但是它也不是核心模塊,也不是第三方的包,肯定是會報錯的。