zoukankan      html  css  js  c++  java
  • Node.js 学习笔记(一)

    node.js说白了就是JavaScript。
    node.js的性能是php的86倍(大概)。
    在下载完后可以用命令行打开及运行。
     

    什么是 Web 服务器?

    Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。
    大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。
    目前最主流的三个Web服务器是Apache、Nginx、IIS。

    Web 应用架构

    Client - 客户端,一般指浏览器,浏览器可以通过 HTTP 协议向服务器请求数据。
    Server - 服务端,一般指 Web 服务器,可以接收客户端请求,并向客户端发送响应数据。
    Business - 业务层, 通过 Web 服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
    Data - 数据层,一般由数据库组成。
     
    web模块:http
    代码示例:
    const http=require('http');
    var server=http.createServer(function(req,res){  //req----require是请求,res----respond是回应
    console.log("访问了一次");//这里改为("req.url")可以返回访问的网址
    res.write("在页面上显示文字");
    res.end();
    });
    server.listen(8080);//监听,括号里为本地端口号,一台服务器可能同时对外提供很多种服务,端口是代表访问服务器里哪种服务的一串数字。 这里的地址为localhost:8080.
    //用谷歌浏览器返回网址的时候会连带返回/favion.ico这是选项卡默认的小图标
    //可以在createServer里用switch控制不同访问网址打开的界面。
     
    文件系统:fs
    var fs=require("fs");
    fs模块中的方法均有同步和异步版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()。
    异步方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
    建议使用异步,比起同步,异步方法性能更高,速度更快,而且没有阻塞。
    实例:
    创建一个index.html文件,内容为
    创建file.js文件,代码如下:
    var fs= requeir("fs");
    //异步读取
    fs.readFile("index.html",function(err,data){
    if(err){
    return console.error(err);
    }
    console.log("异步读取:"+data.toString());//这里如果不加 toString() 会显示一堆二进制
    });
    //同步读取
    var data =fs.readFileSync('index.html');
    console.log("同步读取:"+data.toString());
    console.log("程序执行完毕。");
    以上代码执行结果入下:
    同步读取:www.nodeJs.com
     
    程序执行完毕。//注意这里是程序先执行完毕
    异步读取:www.nodeJs.com
     
    示例:
    const http=require('http');
    const fs=require('fs');
    var server=http.createServer(function(req,res){
    //文件的路径 req.url=>'/index.html'
    //将文件都放在一个叫‘www’的文件夹里读取文件只要=>'./www'+req.url;
    var file_name='./www'+req.url;
    fs.readFile(file_name,function(err,data){
        if(err){
            res.write('404');
         }else{
            res.wirte(data);
        }
        res.end() //注意这玩意的摆放位置
        });
    });
    server.listen(8080);
     
    请求方式----get(数据在url中)
    html代码:
    <form action="http://localhost:8080/aaa" method="get">
        用户:<input type="text" name="user" value="" /><br />
        密码:<input type="password" name="pass" value="" /><br />
        <input type="submit" value="提交" />
      </form>
    node.js代码:
    var http=require('http');
    http.createServer(function(req,res){
      console.log(req.url);
      res.write('submit success');
      res.end();
    }).listen(8080);
    输入后获得数据,?前面为请求地址,后面为请求数据。
     
    字符串切割方式 1
    var http = require('http');
    http.createServer(function(req, res) {
      var GET = {};
      if (req.url.indexOf('?')!=-1){
        var arr = req.url.split('?');
        var url = arr[0];
        //arr[0]=>地址 '/aaa'
        //arr[1]=>数据 'user=xuhuihong&pass=123456'
        var arr2 = arr[1].split('&');
        //arr2=>['user=blue','pass=123456']
        for (var i = 0; i < arr2.length; i++) {
          var arr3 = arr2[i].split('=');
          //arr3[0]=>名字 'user'
          //arr3[1]=>数据 'blue'
          GET[arr3[0]] = arr3[1]; //键值对
        }
      }else {
        var url = req.url;
      }
      console.log(url, GET);
      res.write('submit success');
      res.end();
    }).listen(8080);
     
    字符串切割方式 2
    var http = require('http');
    const querystring = require('querystring');
    http.createServer(function(req, res) {
      var GET = {};
      if (req.url.indexOf('?')!=-1){
        var arr = req.url.split('?');
        var url = arr[0];
        GET=querystring.parse(arr[1]);
      }else {
        var url = req.url;
      }
      console.log(url, GET);
      res.write('submit success');
      res.end();
    }).listen(8080);
     
    字符串切割3 ----url模块
    示例:
    nodejs代码
    const urlLib=require('url');
    var obj=urlLib.parse('https://www.bilibili.com/index?a=55&b=6600');
    console.log(obj);
     
    结果
    Url {
    protocol: 'https:',
    slashes: true,
    auth: null,
    host: 'www.bilibili.com',
    port: null,
    hostname: 'www.bilibili.com',
    hash: null,
    search: '?a=55&b=6600',
    query: 'a=55&b=6600',   
    pathname: '/index',
    path: '/index?a=55&b=6600',
    href: 'https://www.bilibili.com/index?a=55&b=6600' }
    如果在parse中加入参数true,query部分会被解析
    var obj=urlLib.parse('https://www.bilibili.com/index?a=55&b=6600',true);
     
    query: { a: '55', b: '6600' },
    切割示例:
    var http = require('http');
    const urlLib=require('url');
    http.createServer(function(req, res) {
      var obj=urlLib.parse(req.url,true);
      var url=obj.pathname;
      var GET=obj.query;
      console.log(url, GET);
      res.write('submit success');
      res.end();
    }).listen(8080);
     
     
    请求方式----post(数据在文件体中)
    get数据的大小最大为32k
    post数据最大为1G,因此post数据的发送方式为分段发送。
    用form提交的post数据没有url。
     
    示例:
    const http = require('http');
    const querystring=require('querystring');
    http.createServer(function(req, res) {
      //post--req
      var str="";//接受数据
      //data--有一段数据到达(很多次)
      var i=0;
      req.on('data',function(data){
        console.log('第${i++}次收到数据');
        str+=data;
      });
      //end-数据全部到达(一次)
      req.on('end',function(){
        var POST=querystring.parse(str);
        console.log(str);
      });
    }).listen(8080);
    结果
    user=qqqqqq&pass=aaaaaaaaa
    综合示例:
    const http=require('http');
    const fs=require('fs');
    const queryString=require('querystring');
    const urlLib=require('url');
     
    var server = http.createServer(function(req,res){
      //GET
      var obj=urlLib.parse(req.url,true);
      var url=obj.pathname;
      const GET=obj.query;
      //POST
      var str='';
      req.on('data',function(data){
        str+=data;
      });
      req.on('end',function(){
        var POST=queryString.parse(str);
        /*
        url--要什么
        GET--get数据
        POST--post数据
        */
        console.log(url,GET,POST);
        //文件请求
        var file_name='./www'+url; //这里url要输完后缀
        fs.readFile(file_name,function(err,data){
          if(err){
            res.write('404');
          }else{
            res.write(data);
          }
          res.end();
        });
      });
    });
    server.listen(8080);
     
    结果:
    post方式:/aaa {} { user: 'aaaaa', pass: 'dddddd' }
     
    get方式:/aaa { user: 'aaaaaa', pass: 'dddddddddd' } {}
  • 相关阅读:
    Docker Mysql 只从复制
    Mysql 常用sql记录
    ssh 内网穿透
    MyBatis相关记录
    mybatis(plus) 继承子模块的 Mapper文件
    Navicat 连接 Mysql 错误 2059
    angular service 进行组件通信
    angular 中的 ? 和 !
    angular @Input() 和 @Output()
    Centos7 安装 Docker CE
  • 原文地址:https://www.cnblogs.com/BlackFungus/p/9129517.html
Copyright © 2011-2022 走看看