NodeJS学习笔记

1.命令

npm init //初始化
//安装包
npm install xxx 或者 npm i xxx 
//卸载包
npm uninstall XXX 或者 npm un xxx

2.模块

  1. 全局模块:随时随地都能访问,不需要引用
    • 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
      
  2. 系统模块:需要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.readFileSynclet data=fs.readFileSync('./a.text')同步写法

      • fs.writeFile

        //flag:a为追加内容的意思
        fs.writeFile('b.text','啦啦啦',{flag:'a'},(err)=>{
            if(err){
               throw err
            }
        })
        
      • fs.writeFileSynclet data=fs.writeFileSync('b.text','啦啦啦')同步写法

      • fs.accessSync(path[, mode]) :同步地测试用户对 path 指定的文件或目录的权限

        • F_OK,表明文件对调用进程可见。 这对于判断文件是否存在很有用,但对 rwx权限没有任何说明。如果未指定模式,则默认值为该值。
        • R_OK,表明调用进程可以读取文件。
        • W_OK,表明调用进程可以写入文件。
        • X_OK,表明调用进程可以执行文件。 在 Windows 上无效(表现得像 fs.constants.F_OK
  1. 自定义模块
    • exports
    • module:可以导出对象、functionclass
    • require
      • 如果有路径就去路径里边找
      • 没有的话就去node_modules中找

3.http模块

  • get请求
用户名 密码
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请求
用户名 密码
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)

5.框架有express、koa2等

你可能感兴趣的:(NodeJS学习笔记)