1.命令
npm init //初始化
//安裝包
npm install xxx 或者 npm i xxx
//卸載包
npm uninstall XXX 或者 npm un xxx
2.模塊
- 全局模塊:隨時隨地都能訪問存崖,不需要引用
process.env
:環(huán)境變量-
process.argv
:會返回一個數(shù)組竣灌,其中包含當(dāng)Node.js
進程被啟動時傳入的命令行參數(shù)仔沿。- 第一個元素是
process.execPath
。 如果需要訪問argv[0]
的原始值,則參見process.argv0
阁将。 - 第二個元素是正被執(zhí)行的
JavaScript
文件的路徑潦刃。 - 其余的元素是任何額外的命令行
- 第一個元素是
-
process.cwd()
:返回運行當(dāng)前腳本的工作目錄的路徑侮措。參考鏈接:node中__dirname、__filename乖杠、process.cwd()分扎、process.chdir()表示的路徑__dirname 表示當(dāng)前文件所在的目錄的絕對路徑 __filename 表示當(dāng)前文件的絕對路徑 module.filename ==== __filename 等價 process.cwd() 返回運行當(dāng)前腳本的工作目錄的路徑 process.chdir() 改變工作目錄
例子,文件路徑有如下結(jié)構(gòu): newapp > demo > hello.js//在hello.js文件中編寫如下代碼: console.log(__dirname); console.log(__filename); console.log(module.filename===__filename); console.log(process.cwd()); process.chdir('/Users/jerry') console.log(process.cwd());
/Users/jerry/51talk/newapp/demo /Users/jerry/51talk/newapp/demo/hello.js true /Users/jerry/51talk/newapp /Users/jerry
- 系統(tǒng)模塊:需要
require()
胧洒,但不需要單獨下載-
path
:用于處理文件路徑和目錄路徑的實用工具-
path.join
:用于連接路徑畏吓。該方法的主要用途在于墨状,會正確使用當(dāng)前系統(tǒng)的路徑分隔符,Unix系統(tǒng)是”/“菲饼,Windows系統(tǒng)是”\“肾砂。 -
path.resolve
:用于將相對路徑轉(zhuǎn)為絕對路徑。它可以接受多個參數(shù)宏悦,依次表示所要進入的路徑通今,直到將最后一個參數(shù)轉(zhuǎn)為絕對路徑。如果根據(jù)參數(shù)無法得到絕對路徑肛根,就以當(dāng)前所在路徑作為基準(zhǔn)辫塌。除了根目錄,該方法的返回值都不帶尾部的斜杠派哲。
-
let path=require('path') console.log(path.dirname('/node/a/b/1.jpg')) # /node/a/b目錄 console.log(path.basename('/node/a/b/1.jpg')) # 1.jpg console.log(path.basename('/node/a/b/1.jpg')) # .jpg 擴展名 console.log(path.resolve('/node/a/b/c','../../','d')) # /node/a/d console.log(path.resolve(_dirname,'index.js')) #得到文件的絕對路徑 //__dirname 總是指向被執(zhí)行 js 文件的絕對路徑臼氨,所以當(dāng)你在 /d1/d2/myscript.js 文件中寫了 __dirname, 它的值就是 /d1/d2 芭届。相反储矩,./ 會返回你執(zhí)行 node 命令的路徑,例如你的工作路徑褂乍。
- fs:用于文件讀寫操作
-
fs.readFile
fs.readFile('./a.text',(err,data)=>{ if(err){ console.log(err) }else{ data.toString() } })
fs.readFileSync
:let data=fs.readFileSync('./a.text')
同步寫法-
fs.writeFile
//flag:a為追加內(nèi)容的意思 fs.writeFile('b.text','啦啦啦',{flag:'a'},(err)=>{ if(err){ throw err } })
fs.writeFileSync
:let data=fs.writeFileSync('b.text','啦啦啦')
同步寫法-
fs.accessSync(path[, mode])
:同步地測試用戶對path
指定的文件或目錄的權(quán)限-
F_OK
持隧,表明文件對調(diào)用進程可見。 這對于判斷文件是否存在很有用逃片,但對 rwx權(quán)限沒有任何說明屡拨。如果未指定模式,則默認(rèn)值為該值褥实。 -
R_OK
呀狼,表明調(diào)用進程可以讀取文件。 -
W_OK
损离,表明調(diào)用進程可以寫入文件哥艇。 -
X_OK
,表明調(diào)用進程可以執(zhí)行文件僻澎。 在Windows
上無效(表現(xiàn)得像fs.constants.F_OK
)
-
-
-
- 自定義模塊
- exports
-
module:可以導(dǎo)出對象貌踏、
function
、class
等 -
require
- 如果有路徑就去路徑里邊找
- 沒有的話就去node_modules中找
3.http模塊
- get請求
<form action="http://localhost:8080/aaa" method="GET">
用戶名<input type="text" name="userName" >
密碼<input type="password" name="password" >
<input type="submit" value="提交">
</form>
let http=require('http')
let url=require('url')
http.createServer((req,res)={
let {pathname,query}=url.parse(req.url,true) //為true轉(zhuǎn)成json格式
}).listen(8080)
- post請求
<form action="http://localhost:8080/aaa" method="POST">
用戶名<input type="text" name="userName" >
密碼<input type="password" name="password" >
<input type="submit" value="提交">
</form>
let http=require('http')
let querystring=require('querystring')
http.createServer((req,res)={
let result=[]
req.on('data',buffer=>{
result.push(buffer)
})
req.on('end',()=>{
})
}).listen(8080)
4.實現(xiàn)一個登錄接口
這里只是做一個用法示范窟勃,工作中主要用第三方庫來做
let http=require('http')
let url=require('url')
let querystring=require('querystring')
let user={
admin:'123456'
}
http.createServer((req,res)={
let path,post,get
if(req.method=='GET'){
let {pathname,query}=url.parse(req.url,true)
path=pathname
get=query
complete()
}else if(req.method=='POST'){
let result=[]
path=req.url
req.on('data',buffer=>{
result.push(buffer)
})
req.on('end',()=>{
complete()
})
}
function complete(){
if(path=='/login'){
let {password,username}=get
res.writeHead(200,{
"Content-Type":"text/plain;charset=utf-8"
})
if(!user[username]){
res.end(JSON.stringify({
err:1,
msg:'用戶名不存在'
}))
}else if(user[username]!=password){
res.end(JSON.stringify({
err:1,
msg:'密碼錯誤'
}))
}else{
res.end(JSON.stringify({
err:0,
msg:'登錄成功'
}))
}
}
}
}).listen(8080)