node.js基础 (path fs http)

  • 以前博主也发过node 类似的文章  但是内容不够详细  所以博主又重新梳理了一下关于node的知识点

1. node.js 的优势:

  • 对于文件读写,Node采用的是非阻塞IO

  • 传统IO在读写文件的时候CPU来处理,而代码执行也处于等待中,浪费性能

  • 非阻塞IO将读写操作交给CPU,而代码正常执行,减少等待浪费的性能

2. node.js的特点

  • 其移植了chrome V8 引擎,解析和执行代码机制和浏览器js相同

  • 其沿用了JavaScript语法、另外扩展了自己需要的功能

  • 总结: nodejs 是一个后端语言 , 其具备操作文件的能力, 可以具备服务器的创建和操作能力

    • 其语法是JavaScript语法,代码运行在chrome V8 引擎之上

3. 内置对象介绍

  1. 分类:
      全局对象: 何时何处都能访问
      核心对象: 向系统索要,引入即可使用

      自定义对象: 按路径引入即可
  2. process(全局对象)
    每个系统的环境变量几乎都不一样,可以利用环境变量中的具体某个特定的值来区分不同的机器
    process.env 是一个对象,我们可以通过其.属性名来获取具体的环境变量值
    设置一个特定的环境变量,以达到简单区分不同的机器,从而针对生产/开发环境运行不同的效果
    process.argv 获取命令行参数
  3. filename/dirname(全局对象)
    __filename 获取当前运行文件的目录,绝对路径
    __dirname 当前运行文件的绝对路径

4. node.js 实现规范

  • CommonJS : 规范JavaScript语言作为后端语言运行的标准
  • 具备什么能力,该怎么做 ,比如: 具备服务器的功能/ 可以操作文件 .....

  • 模块应该怎么写: Module :

    • 1:依赖一个模块 require('模块名(id)')

    • 2: 需要被模块依赖 module.exports = 给外部的数据

    • 3:一个文件是一个模块

5. 核心对象

 path 路径模块

  • const path = require('path');

  • 路径 -> 在处理路径的时候很擅长,但是,其不负责判断路径是否存在文件

  • 拼接并修正路径 path.join(__dirname,'a','b'); 

  • path.resovle('./xxx') 相对转绝对

  • 接收一个合法的路径字符串,转换成一个对象

    • let pathObj = path.parse(mypath);

  • 接收一个路径对象,转换成一个字符串路径

    • let str = path.format(pathObj);

  • path对象是方便我们操作路径的,对于获取来讲: parse解析成对象,format转换成字符串.join拼接并修正.... 对于修改路径对象来讲,可以用base属性更改,不能用name,ext更改

fs 文件系统模块

  • const fs= require('fs');//引入模块
  • 详细请参考 http://nodejs.cn/api/fs.html#fs_url_object_support
  • //读 fs.readFile(路径,回调函数);
    //写 fs.writeFile(路径,数据,回调函数)

http 超文本传输协议

  •    创建服务器步骤
    - 1:引入http核心对象
    - 2:利用http核心对象的.createServer(callback); 创建服务器对象
    - 3:使用服务器对象.listen(端口,ip地址) 开启服务器
    - 4:callback(req,res) 根据请求处理响应
    
    const http = require("http");
    //创建服务器
    let server = http.createServer();
    server.on("request",(req,res)=>{
        console.log(req.url);
        console.log(req.method);
        console.log(req.header);
        res.end("niubi");
    })
    server.listen(8888,()=>{
        console.log("服务器启动成功");
    })

    http 超文本传输协议描述:

  • 协议至少双方 -> http双方!!

    • 客户端(浏览器) -> 服务器 BS

    • 原生应用(QQ) -> 服务器 CS

  • 就是数据如何传输

  • 特点:

    • 一问一答(先有请求,后有响应)

    • 5大特点:

      • 轻便/ 简单快速 支持客户/服务器模式

      • 无连接(不为每一个请求保持住链接)

      • 无状态( 服务器不记得客户端是谁 ) -> cookie

  • 主体对象(核心对象http)

    • 服务器对象 http.createServer();

    • 客户端对象http.request({host:'www.baidu.com'});

    • 请求报文对象(对于服务器来说,是可读) req

    • 响应报文对象(对于服务器来说,是可写) res

  • 状态码分类

    • 1 开头,正在进行中

    • 2开头,完成

    • 3开头 ,重定向

    • 4开头 , 客户端异常

    • 5开头, 服务器异常

  • 响应对象

    • 响应首行 res.writeHead(状态码)

    • 写响应头

      • 一次性写回头信息

        • res.writeHead(200,headers)

      • 多次设置头信息

        • res.setHeader(key,value);

    • 写响应体

      • 一次性写回响应体

        • res.end();

      • 多次写回响应体

        • res.write();

 

6. npm (操作简写 => uninstall -> un ,install -> i , --save -> -S__ )

  • 自己先有一个包描述文件 package.json

  • 创建一个包描述文件 npm init -y

  • 下载一个包 npm i art-template --save

    • 记录依赖--save

  • 根据package.json文件中的dependencies属性恢复依赖

    • 恢复包 npm i

  • 卸载一个包 npm uninstall [email protected] --save

  • 查看包的信息

    • npm info art-template

  • 查看包的信息中的某个字段(版本)

    • npm info art-template versions

  • 查看包的文档

    • npm docs art-template

  • 安装全局命令行工具

    • npm i-g http-server

  • 卸载全局命令行工具

    • npm uninstall -g http-server

  • 查看全局包的下载路径

    • npm root -g

nrm是npm的镜像源管理工具

  • 1:全局安装 npm install -g nrm

  • 2:查看当前可选的镜像源 nrm ls

  • 3:切换镜像源 nrm use taobao

包的加载机制

  • 我们未来可能需要辨识一个包中,入口是否是我们想要的启动程序

  • 1:查找node_modules下的包名文件夹中的main属性(常用)

  • 2:不常用:查找node_modules下的包名.js

  • 3:查找node_modules下的包名文件夹中的index.js(常用)

 

 

 

你可能感兴趣的:(node,js)