zoukankan      html  css  js  c++  java
  • Nodejs

    学Node本质不是在学node,是在学服务器(web后台)编程

    大前端时代:JavaScript语言也可以运行在服务器端

    使用JavaScript这门语言也可以进行服务器编程

    JavaScript通过node.js运行在服务器端

    简单说nodejs就是运行在服务器端的JavaScript,利用JavaScript在服务端进行编程

    node.js就是事件驱动、非阻塞I/O模型

    nodejs开发的构成就成利用npm开发的社区提供的大量的第三方包加上基本的ECMAScript脚本语言以及node平台提供的一系列编程接口进行编程。

     

    JavaScript语言本身是指ECMAScript,语言本身不包含BOM、DOM,BOM、DOM是浏览器环境给JavaScript提供的编程接口对象,理论上DOM、window都是属于BOM。

    浏览器都有引擎,最少两个,一个是渲染引擎,一个是JavaScript解析执行引擎。

    V8引擎就是专门用来解析和执行JavaScript代码的。

    在所有浏览器中,Google chroome的V8引擎是最快的js脚本代码解析执行引擎。性能非常好

    以前的JavaScript就是只能在浏览器里运行,包含ECMAScript和BOM浏览器的东西。

    node不是一门新语言,他只是把chrome V8引擎移植到自己的环境当中,在这个环境之上构建了一系列的底层API,给ECMAScript提供了一些特定环境的编程接口。


    I/O:输入与输出,例如在地址栏输入地址(输入),回车,到对应的网页(输出)。

    npm托管了大概500000个包,都是JavaScript相关的,没有其他语言的东西。

    只要是有规律的事情,都可以利用程序完成。

    输入命令,会找到node.exe可执行文件进行解析、执行。为什么在哪里输入命令都会解析执行,原因就是环境变量。环境变量中配置path属性,找到node.exe所属目录,不包含配置文件名,把可执行文件的所属目录的绝对路径复制出来。为什么node安装完之后就可以随处在任何地方都可以使用的原因就是node安装自动配置了path环境变量。哈哈!!否则node命令是使用不了的。

     

    node专注于运行在服务端,浏览器是没有对文件读写的能力的,但是node有,他们不是一个东西

    在操作系统中,文件一切都是二进制0、1,需要toString

    或者是这样也可以:

    服务器就做3件事:

    1.接收请求

    2.处理请求

    3.发送响应

    node非常强大,代码本身就能开启一个服务器

    什么是请求路径:主机名+端口号,/之后的是请求路径,例如:localhost:8080/  ,请求路径就是/,例如:localhost:8080/index.html   ,请求路径就是index.html

    IP地址就使用来定位一台计算机的,端口号是用来做什么?每个计算机网卡只有一个,你发了请求,对方的计算机就会收到数据,一个机器上会有好多联网的程序,一个网卡收到的数据,这个数据到底给谁,所以,端口号就是用来指定某个应用程序的。

    如何根据不同的请求处理不同的响应?

    一切资源对于服务器端来说都需要请求

    学服务器端,一定要深刻的认识到路径只是一个标识而已,路径不一定就是能找到真实资源文件,服务端(后端)可能会根据这个标识然后去做处理

    静态资源也是经过设计,前后台在一起的项目,路径不是说你想怎么引就怎么引的,后台会告诉你,你的静态资源往哪放,你请求的时候以什么开头。一定是牢牢地经过后台控制的。

    判断访问资源是不是路径开头是不是/static,一定要记得结束响应,也就是res.end();

    路由就是根据不同的请求做不同的处理,做分发,分发了配置请求的处理,称之为URL路由。

     

    1.node.js组成:谷歌浏览器的V8引擎、C++语言编写的,本质上是一个JavaScript的运行环境。提到js,就能想到浏览器里面的各种交互组件,异步请求等等,它们依靠浏览器         JavaScript 的引擎,来解析页面的js代码。

    2.目前流行的后端语言就是PHP、Java、.Net,使用后端语言实现服务器上的开发叫做后端技术。

    3.nodejs就是让JavaScript(js)可以实现服务器上的开发。

    4.JavaScript(前端语言)+nodejs(JavaScript的运行环境)=实现服务器上的开发(后端技术),也就是说js+nodejs实现了后端开发的技术

    入口文件app.js:

    var http = require('http');
    var fs = require('fs');
    var server = http.createServer();
    server.on('request',function (req,res) {
        var url = req.url;
        if (url === '/') {
            res.writeHead(200,{
                'Content-Type':'text/html'
            });
            fs.readFile('./views/index.html','utf-8',function (err,data) {
                if (err) {
                    res.writeHead(404);
                    res.end();
                }
                res.end(data);
            });
        } else if(url.startsWith('/static')){
            var staticFilePath = '.' + url;
            fs.readFile(staticFilePath,function (err,data) {
                if (err) {
                    res.writeHead(404);
                    res.end();
                }
                res.end(data);
            });
        } else if(url === '/submit'){
            res.writeHead(200,{
                'Content-Type':'text/html'
            });
            fs.readFile('./views/submit.html','utf-8',function (err,data) {
                if (err) {
                    res.writeHead(404);
                    res.end();
                }
                res.end(data);
            });
        } else if(url === '/favicon.ico'){
            fs.readFile('./static/img/favicon.ico',function (err,data) {
                if (err) {
                    res.writeHead(404);
                    res.end();
                }
                res.end(data);
            });
        }else{
            res.writeHead(404);
            res.end('404 Not Found.');
        }
    });
    server.listen(3000,function () {
        console.log('Server is running at port 3000');
    });

    访问静态资源文件:

    <link rel="stylesheet" type="text/css" href="static/css/news.css">
    <img src="static/img/y18.gif" width="18" height="18" style="border:1px white solid;">
    <a href="submit">submit</a>  

    整体项目目录结构:

    nodejs和浏览器执行环境的不同之处:在控制台输入window,

    在node中输入window,是没有的,宿主环境是不一样的。但是有些方法是node有,浏览器没有的,比如process

    commonjs

    变量被覆盖、方法被重写,JavaScript天生缺少模块管理机制

    nodejs是commonjs的产物。

    路径结合参数,拿到需要的内容。

    querystring序列化参数:

    反序列化:

    转义和反转义字符:

    HTTP

    资源加载过程中每个阶段所要耗费的时间,Timing(时间线)

    stalled:等待时间,浏览器发出这个请求到这个请求可以发出的等待时间,一般是代理协商,比如配置的脚本,以及要等待可复用的TCP连接释放的时间,不包含DNS查询和建立TCP连接的时间

    request sent:请求的第一个字节发出以前到最后一个字节的发出后的时间,可以理解为是请求时间或者上传时间

    waiting:请求发出以后到收到响应的第一个字节所花费的时间

    content download:收到响应的第一个字节开始到接受完最后一个字节所花费的时间,也就是下载时间

    通过分析Timing,就可以找到网页慢的瓶颈是在哪。

    Remote Address:远端服务器地址,域名解析后的结果

    HTTP1.1里面一共定义了8种方法,以不同的方式操作指定的资源

    GET:获取或读取数据

    POST:向指定的资源提交数据

    PUT:更新,向指定资源位置提交新的内容,比如更新用户的头像,或者是替换掉线上已有的视频

    DELETE:删除,请求服务器删除我们标识的某个资源

    HEAD:和GET方法一样的,向服务器发出指定资源的请求,好处就是,不用发送全部的内容,就可以获取源信息或者源数据

     

    状态码:1xx,指示信息,表示请求已经接受了,继续处理

        2xx,标识请求已经成功处理掉了

        3xx,请求重定向

        4xx,客户端错误了,请求的时候有语法错误,或者说请求无法实现

        5xx,服务器端错误,服务器无法完成合法的请求

    • 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
    • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
    • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    • 204 NO CONTENT - [DELETE]:用户删除数据成功。
    • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
    • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
    • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

    同步就是执行一个任务,后一个任务等待前一个任务结束在执行,程序的执行顺序与任务的排列顺序是一致的

    什么是I/O,数据的进和出

  • 相关阅读:
    java数组
    python中的换行与不换行
    金融业务知识2---资金的时间价值与跨时期优化
    金融业务知识1---金融和金融系统
    你真的理解正向代理和反向代理吗?
    webpack(9)plugin插件功能的使用
    webpack(8)vue组件化开发的演变过程
    webpack(7)webpack使用vue配置
    webpack(6)webpack处理图片
    webpack(5)webpack处理css文件
  • 原文地址:https://www.cnblogs.com/yuqingfamily/p/8151254.html
Copyright © 2011-2022 走看看