NodeJS学习笔记
2020-04-29 本文已影响0人
Roseska
1.命令
npm init //初始化
//安装包
npm install xxx 或者 npm i xxx
//卸载包
npm uninstall XXX 或者 npm un xxx
2.模块
- 全局模块:随时随地都能访问,不需要引用
-
process.env
:环境变量 -
process.argv
:会返回一个数组,其中包含当Node.js
进程被启动时传入的命令行参数。- 第一个元素是
process.execPath
。 如果需要访问argv[0]
的原始值,则参见process.argv0
。 - 第二个元素是正被执行的
JavaScript
文件的路径。 - 其余的元素是任何额外的命令行
- 第一个元素是
-
process.cwd()
:返回运行当前脚本的工作目录的路径。参考链接:node中__dirname、__filename、process.cwd()、process.chdir()表示的路径__dirname 表示当前文件所在的目录的绝对路径 __filename 表示当前文件的绝对路径 module.filename ==== __filename 等价 process.cwd() 返回运行当前脚本的工作目录的路径 process.chdir() 改变工作目录
例子,文件路径有如下结构: 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
-
- 系统模块:需要
require()
,但不需要单独下载-
path
:用于处理文件路径和目录路径的实用工具-
path.join
:用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是”/“,Windows系统是”\“。 -
path.resolve
:用于将相对路径转为绝对路径。它可以接受多个参数,依次表示所要进入的路径,直到将最后一个参数转为绝对路径。如果根据参数无法得到绝对路径,就以当前所在路径作为基准。除了根目录,该方法的返回值都不带尾部的斜杠。
-
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 总是指向被执行 js 文件的绝对路径,所以当你在 /d1/d2/myscript.js 文件中写了 __dirname, 它的值就是 /d1/d2 。相反,./ 会返回你执行 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为追加内容的意思 fs.writeFile('b.text','啦啦啦',{flag:'a'},(err)=>{ if(err){ throw err } })
-
fs.writeFileSync
:let data=fs.writeFileSync('b.text','啦啦啦')
同步写法 -
fs.accessSync(path[, mode])
:同步地测试用户对path
指定的文件或目录的权限-
F_OK
,表明文件对调用进程可见。 这对于判断文件是否存在很有用,但对 rwx权限没有任何说明。如果未指定模式,则默认值为该值。 -
R_OK
,表明调用进程可以读取文件。 -
W_OK
,表明调用进程可以写入文件。 -
X_OK
,表明调用进程可以执行文件。 在Windows
上无效(表现得像fs.constants.F_OK
)
-
-
-
- 自定义模块
- exports
-
module:可以导出对象、
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转成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.实现一个登录接口
这里只是做一个用法示范,工作中主要用第三方库来做
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)