zoukankan      html  css  js  c++  java
  • node基础 day1

    js为什么能在浏览器中运行

    • 浏览器内部存在一个js解析器,解析ECMAscript

      把引擎从浏览器中抽离出来,不再依赖浏览器,作为一个软件安装在电脑上,在命令行里面, 这个软件就是node

    node 和 js 的区别

    • 原生js必须依赖浏览器运行
    • node不再依赖浏览器
    • domom 原生js的组成
    • node不依赖浏览器 , 不会存在特别大的兼容问题
    • js不能完成 创建服务 , 连接数据库 , 操作本地文件(读写) , node可以

    node 暂时在大型项目里面有缺陷 : 计算量

    node 作为中间层 一些小项目的后端

    lts稳定版 current测试版

    nvm list   弹出安装的node版本
    nvm list available 现在源上能安装的所有的node版本
    nvm install 10.15.2  node安装
    nvm uninstall 10.15.3  卸载
    nvm use 10.16.3  切换node版本
    
    查看版本   npm -v
    安装模块   npm install <module name>
    全局安装   npm install <module name> -g
    卸载模块   npm uninstall <module name>
    查看安装包 npm ls
    更新模块   npm update <module name>
    搜索模块   npm search <module name>
    淘宝镜像
    https://npm.taobao.org/
    

    commonJS

    规范 : 模块化的思想

    • 定义模块 一个js文件,每个js文件都有自己的功能

    • 定义好模块后.暴露接口 给其他引用当前模块的模块提供数据

      module.exports={
      	num : 1,
      	fn : function(){
      	
      	}
      }
      
    • 引用模块 require('模块的名称');

    node.js

    fs模块

     使用模块之前:
            //引入模块
            const fs = require('fs');
    
    stat
    得到文件与目录的信息:stat
                参数1 : 路径     参数2 : 回调函数   (err,stats) {stats.isFile() 检查是不是文件}
    
            fs.stat('./aaaa.js',(err,stats) =>{
                if(err){
                    console.log(err);
                }else{
                    console.log(stats.isFile())
                }
            })
     /*
         正确返回 true
         
         报错:
         { [Error: ENOENT: no such file or directory, stat 'D:aaaa.js']
          errno: -4058,
          code: 'ENOENT',
          syscall: 'stat',
          path: 'D:aaaa.js' }
     */
    
    
    mkdir
            创建一个目录(文件夹):mkdir
                参数1 : 文件名称  参数2 : 回调   (err){当没有创建 成功的时候返回的值}
        
        	fs.mkdir('./new',(err)=>{
                if(err){
                    console.log(err);
                }
            })
            
            fs.mkdir('./new/child',(err)=>{
                if(err){
                    console.log(err);
                }
            })
            
    
    writeFile
           创建文件并写入内容:writeFile
                参数1 : 文件名称   参数2 : 更改的信息     参数3:回调  (err) {修改失败所做的事件}
    
            fs.writeFile('./new/a.js','console.log(111)',(err)=>{
                console.log(err)
            })
    
    
    readFile 读取文件
            读取文件的内容:readFile
                参数1 : 文件的 名称   参数2 : 编码格式    参数3 :回调 (err,data){ if(err){ console.log(err) }else{ console.log(data) 返回buffer类型 } }    
    
            fs.readFile('./new/a.js','utf-8',(err,data)=>{
                if(err){
                    console.log(err);
                }else{
                    console.log(data);
                }
            })
    
    
    readdir
            列出目录的东西:readdir
                参数1 : 路径     参数2 : 编码格式   参数3:  (err,list){ consle.log(list) }
    
            fs.readdir('./new',(err,list)=>{
                if (err) {
                    console.log(err)
                }else{
                    console.log(list)
                }
            })
    
    
    rename
            重命名目录与文件:rename
                参数1 : 旧文件   参数2 :新文件    参数3  (err){ console.log(err) };
                
            fs.rename('./new/a.js','./new/b.js',(err)=>{
                if (err) {
                    console.log(err);
                }
            })
    
    
    

    path模块

    join
        path.join()Unix系统是”/“,Windows系统是”“
        
        let str = path.join('/a','/b','/c','/d');
        console.log(str);
    
    basename
    let str =  path.basename('foo/bar/baz/asdf/quux.html','.html');    
    console.log(str);
    //返回文件的名称  如果添加第二个参数‘.html’ 则返回quux;
    
    dirname
    返回的是文件的目录名称
    let res = path.basename('http://www.baidu.com/foo/bar/baz/asdf/index.html');
    console.log(res); //index.html
    
    extname
    返回文件的扩展名
    let res = path.extname('http://www.baidu.com/foo/bar/baz/asdf/index.js');
    console.log(res); //.js
    

    url模块

    parse
      		protocol:协议
            host:域名
            search:参数
            query:?后面的参数
            pathname:路径
            href:url链接
    
        let str = url.parse('http://www.baidu.com:80/images/index.php?a=100');
        console.log(str);
        
        /*
      Url {
          protocol: 'http:',
          slashes: true,
          auth: null,
          host: 'www.baidu.com:80',
          port: '80',
          hostname: 'www.baidu.com',
          hash: null,
          search: '?a=100',
          query: 'a=100',
          pathname: '/images/index.php',
          path: '/images/index.php?a=100',
          href: 'http://www.baidu.com:80/images/index.php?a=100' }
        */
    
    
    format
       const result = url.parse(参数1):返回值是一个urlobject
       const newUrl = url.format(result):根据urlObject生成一个url
    
        let res = url.parse('http://www.baidu.com:80/images/index.php?a=100');
        let str = url.format(res);
        console.log(str) //http://www.baidu.com:80/images/index.php?a=100
        
    
    resolve
    替换域名后第一个/后的内容
    const str = url.resolve('/one/two/three','four');
    console.log(str); //one/two/four
    
    const str = url.resolve('/one/two/three','/four');
    console.log(str);  //全部替换(第一个/开始) /four
    

    http开启服务

        const http = require('http');
        //http 中得 createserver()  方法   参数为一个回调
        //回调里面有两个参数   第一个参数 : request  (请求)   第二个参数 ;responese (响应);   
        const server = http.createServer( (request,responese) => {
            //设置响应头
            //状态码得设置 200
            //数据得类型
                //内容类型:text/plain 会将html标签进行转义,原样输出
                //如果设置为text/html 会解析成html标签
            //writeHead()  第一个参数为状态码   第二个参数为一个对象
            responese.writeHead(200,{"content-type":'text/html;charset=utf-8'});
    
            //设置后端向客户端响应得内容
            responese.write('<h2>后端响应到客户到得信息</h2>');
    
            //响应结束
            responese.end();
        } )
        //设置端口号:  .listen()
        server.listen(8080);
        console.log('server running at http://127.0.0.1:8080');
    

    路由

    路由是根据不同的 url 地址展示不同的内容或页面

    前端路由

    rutor 适合做单页面开发

    后端路由 :

    根据客户端请求的地址不同 , 响应到客户端的数据也是不一样额

    const http = require('http');
    const url = require('url');
    
    const server = http.createServer( (req,res) => {
        //设置相应
        res.writeHead(200,{'content-type':'text/html;charset=utf-8'});
        //获取客户端请求的地址
        let myUrl = url.parse(req.url).pathname;
        //服务端根据客户端请求地址的不同。响应不同的数据
        if(myUrl != '/favicon.ico'){
            //地址判断
            switch(myUrl){
                case '/login':
                    //响应登陆信息
                    res.write('<h2>您好请登录</h2>');
                    break;
                case '/register':
                    res.write('<h2>您好请注册</h2>');
                    break;
                case '/xxx':
                    res.write('<h2>您好,xxx</h2>');
                    break;
            }
        }
    
        res.end();
    } )
    //设置端口号'
    server.listen(8888);
    console.log('server running at http://127.0.0.1:8888');
    
    
  • 相关阅读:
    map函数
    修改文件夹所有者权限
    [Python]Python基础趣讲精练
    jmeter生成随机字符串
    Jmeter生成8位不重复的随机数
    Jmeter接口测试使用总结
    Jmeter模拟多个号码注册
    Jmeter实现多用户注册登录
    jmeter 生成随机数(手机号)&随机中文字符
    python接口自动化如何封装获取常量的类
  • 原文地址:https://www.cnblogs.com/zhaoxinran997/p/12170793.html
Copyright © 2011-2022 走看看