美文网首页
NodeJS学习笔记

NodeJS学习笔记

作者: Roseska | 来源:发表于2020-04-29 11:43 被阅读0次

    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请求
    <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)
    

    5.框架有express、koa2等

    相关文章

      网友评论

          本文标题:NodeJS学习笔记

          本文链接:https://www.haomeiwen.com/subject/hhjgwhtx.html