美文网首页Nodejs
Node.js 第一天

Node.js 第一天

作者: 前端好有趣 | 来源:发表于2018-10-16 11:34 被阅读186次

1、node.js 介绍

node.js 是什么?
  • 概念:
    • 不是一门语言、一个库、一个框架
    • 而是一个 JavaScript 运行时环境(runtime)
  • 作用:
    • 解析和执行 JavaScript 代码
    • 使 JavaScript 可以完全脱离浏览器来运行
node.js 和浏览器中的 JavaScript 的区别
  1. 浏览器中的 JavaScript
    • EcmaScript
    • BOM
    • DOM
  2. Node.js
    • EcmaScript
      • 变量
      • 方法
      • 数据类型
      • 内置对象(Array、Object、Date、Math ...)
    • 在 Node 这个 JavaScript 执行环境中,为 JavaScript 提供了一些服务器级别的操作 API(模块)
      • 文件读写模块
      • http(网络)服务模块
      • os 操作系统模块
      • path 路径操作模块
      • 等处理...
V8引擎
  • node.js,构建于 Chrome 的 V8 引擎之上

    • 代码只是具有特定格式的字符串而已
    • 引擎可以认识它,引擎可以帮你去解析和执行
    • Google Chrome 的 V8 引擎是目前公认的解析执行 JavaScript 代码最快最高效的
    • node.js 的作者把 V8 引擎移植了出来,开发了一个独立的 JavaScript 运行时环境
node.js的特性
  • event-driven 事件驱动
  • non-blocking I/O nodel非阻塞IO模型(异步)
  • lightweight and efficient轻量和高效
npm
  • npm 是世界上最大的开源库生态系统
  • 接大多数 JavaScript 相关的包都存放在了 npm 上,这样做的目的是为了让开发人员更方便的下载使用
  • npm install jquery
node.js 能做什么?
  • web 服务器后台
  • 命令行工具
    • npm(node 开发的)
    • git(用 c 语言开发的,node 也可以做)
    • hexo(node 开发的)
  • 对于前端开发工程师来讲,接触 node 最多的是它的命令行工具
    • 自己写的很少,主要是使用别人第三方的
      • webpack
      • gulp
      • npm
预备知识
  • HTML
  • CSS
  • JavaScript
  • 简单的命令行工具
    • cd
    • dir
    • ls
    • mkdir
    • rm
能学到啥?
  • B/S 编程模型
    • Browser-Server
    • back-end
    • 任何服务端技术与 BS 编程模型都是一样的,和语言无关,Node.js 只是作为我们学习BS编程模型的一个工具而已
  • 模块化编程
    • RequireJS
    • SeaJS
    • @import('文件路径');
    • 以前认知的 JavaScript 只能通过 script 标签来加载
    • 在 Node 中可以想 @import() 一样来引用加载文件
  • Node 常用 API
  • 异步编程
    • 回调函数
    • Promise
    • async
    • generator
  • Express Web 开发框架
  • EcmaScript 6
    • 只是一个新的语法而已

2、起步

安装
执行
  • 创建node.js文件,比如index.js
注意
  • 不要创建名为node.js的文件名,不会执行该文件,并弹出文件代码
  • 除了这个名字,可以随便起,但不要起中文名
特点
  • 没有 BOM 和 DOM

    • 完全就没有BOMDOM,没有这些 API,它的 API 比如实现读写文件

    • 文件操作能力

      • 浏览器中的 JavaScript 是没有文件操作能力的,但 node.js 中的 JavaScript 具有文件操作的能力,node.js 提供了实现这些功能的 API
模块介绍(API)
  1. NodeJavaScript 提供了很多服务器级别的 API,这些 API 绝大多数都被包装到了一个具名的核心模块中了。

  2. 例如文件操作的fs核心模块,http服务构建的http模块,path 路径操作模块、os 操作系统信息模块等等。

  3. 例如:

var fs = require('fs');
var http = require('http');
var OS = require('os');
var path = require('path');
  1. 作用域:
  • Nodejs 没有全局作用域,只有模块作用域
  • 超出模块的内容都不能被访问,外部文件访问不到内部文件内容,内部也访问不到外部。各个模块要想通信,需要用到requireexports
  1. require
  • 它是一个Node方法,用来加载模块的

  • 被加载的模块,会立马执行,执行完毕后,再执行 require 之后的代码

  • 注意,自行编写的模块,被加载的时候,可以省略后缀名。不过,就算引入文件就在该目录下,也一定要用相对路径./来引入。只有核心模块的引用可以不用相对路径。

  1. exports
  • 拿到被加载文件模块导出的接口对象(exports),这是一个空对象 {},如果要使用另外 require 模块里面的数据,可以使用 exports设置。

  • exports简介:

    1. 在每个文件模块中,都提供了一个对象:exports,可以设置并供其它模块使用该对象里面的内容

    2. exports默认是一个空对象

  • 如何使用:

    1. 设置 a.js:
    var bExports = require('./b');
    console.log(bExports.foo); // 打印结果为 “hello world”
    console.log(bExports.add(1,2)); // 打印结果为 3
    
    1. 设置 b.js:
    var foo = 'hello world'; // 这里设置的foo只能在b模块中使用
    exports.foo = foo; // 不过在此处,局部变量 foo 被赋值给 exports.foo ,即可以在任意模块require b.js使用
    exports.add = function (x,y) { // 定义函数add到exports对象中
        return x+y;
    };
    
    1. 执行a.js:
    node a.js // 打印结果为 “hello world”
    
  1. 模块分三种:
  • 具名的核心模块,例如 fshttpos
  • 用户 自己编写 的文件模块
核心模块
fs 文件操作系统
  • 介绍

    1. 是 filesystem 的简写,就是文件系统的意思
    2. 在 Node 中如果想要进行文件操作,就必须引入 fs 这个核心模块
  • 使用:

    在 fs 这个核心模块中,就提供了所有的文件操作相关的 API,在 fs 这个核心模块中,就提供了所有的文件操作现观的 API

  1. 通过 require 方法加载 fs 核心模块

var fs = require('fs');

  1. 读取文件

    readFile 方法:

    fs.readFile('life.md',function (error,data){});

    // 第一个参数:文件路径

    // 第二个参数:回调函数

    举例:

    fs.readFile('hello.js',function (error,data) {
        if (error) {
            console.log('读取文件失败了')
        } else{
            console.log('文件读取成功');
            console.log(data.toString());
        }
    });
    

    console.log(data.toString());这里运用了toString方法,它可以将16进制字符转化成我们能够认识的文字或字符

  2. 创建文件

 举例:

 ```JavaScript
 fs.writeFile('haha.js','大家好,我是node.js',function (error){
     if(error){
         console.log('文件创建失败')
     }else{
         console.log('文件创建成功');
     }
 });
 ```
 // 第一个参数:文件路径

 // 第二个参数:文件内容

 // 第三个参数:回调函数
  1. error :

    在以下两种情况下,error的值为何?

    成功 失败
    data:数据 data:undefined
    error:null error:错误对象
http 文件操作系统
  1. 通过引入var http = require('http');实现

  2. 举例:最简单的http服务

    // 1、加载 http 核心模块
    var http = require('http');
    // 2、使用http.createServer()方法创建一个Web服务器
    var server = http.createServer();
    server.on('request',function () {
        console.log('收到客户端的请求了');
    });
    server.listen(3000,function () {
        console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问');
    });
    
  3. 举例:完整的请求和响应,在不同访问路径做不同的响应

    // 1、加载 http 核心模块
    var http = require('http');
    // 2、使用http.createServer()方法创建一个 Web 服务器
    var server = http.createServer();
    server.on('request',function (request,response) {
        // 这里 url 取的值,是地址栏中链接第一个 / 开始的地方。
        console.log('收到客户端的请求了,请求路径是:' + request.url);
        var url = request.url;
        // 根据请求url,书写内容
        if (url == '/'){
            response.write('index.html');
        }
        if (url == '/login'){
            response.write('this is login page!');
        }
        if (url == '/regist'){
            response.write('this is regist page!');
        }
        // 写完后,一定要有结束函数
         // end函数内可以传字符串,代替write函数
        response.end();
    });
    // 绑定端口号,这里绑定的是3000,但也可以80,这样直接用127.0.0.1就可以访问
    server.listen(3000,function () {
        console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问');
    });
    
    • Request 请求对象
      • 请求对象可以用来获取客户端的一些请求信息,例如请求路径
    • Response 响应对象
      • 响应对象可以用来给客户端发送响应消息,只能够响应二进制与字符串,数字数组对象boolean都不行
  4. 响应内容类型

    1. 引入
    var http = require('http');
    var server = http.createServer();
    server.on('request',function (req,res) {
        // 这一行会打出 “hello 涓栫晫”,因为服务器用UTF-8包装的字符串,被nodejs默认使用当前计算机系统的默认编码(GBK)进行了解析,所以,我们需要设置响应头
        res.end('hello 世界');
    });
    server.listen(3000,function () {
       console.log('Server is running...');
    });
    
    1. url

      1. 概念:资源定位符,只是一个标示,末尾不一定是文件名,可以自己随便取名字,不过,一般最好还是要有含义
      2. 例如:
        1. 我们可以用 http://127.0.0.1:3000/steve 来定位我们的任何资源
        2. 资源可以是图片、文件(mp3、jpg、png、md等)、文档(js、java、php等)
    2. Content-Type:

      • 设置response(res)的响应头,告诉浏览器正确的传输内容编码格式
      res.setHeader('Content-Type','text/plain;charset=utf-8');
      
      • 响应类型:
        • utf-8:代表使用utf-8编码模式进行解析
        • text/plain:文本文档
        • text/html:HTML文档
        • image/jpeg:jpg文件
          • 注意,jpg、mp3等二进制文件,不需要制定编码,一般字符数据才指定编码
        • 等等...
      • 前端工具网址:tool.oschina.net
  5. 补充:

    • 查找端口被占用情况,并获取PID值:sudo lsof -i tcp:端口号
    • 杀死占用该端口的进程:sudo kill -9 PID值
os 操作系统
  1. 通过引入var os = require('os');来实现
  2. 举例:
var os = require('os');
// 获取当前机器的 CPU 信息
console.log(os.cpus());
// 获取内存信息
console.log(os.totalmem());
path 路径操作系统
  1. 通过引入var path = require('path');来实现

  2. 举例:

  3. var path = require('path');
    // 获取该路径文件的 后缀名
    console.log(path.extname('hello.txt'));
    
IP地址和端口号
  • 综合介绍:

    • 所有联网的程序都需要进行网络通信,但计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的(网卡是通过唯一的 ip 地址来进行定位的),所以诞生了端口这个概念
  • ip 地址与 端口号 的关系和异同:

    • ip 地址用来定位计算机

    • 端口号用来定位具体的app

  • 所有需要联网通信的应用程序都会占用一个端口号

  • 端口号的范围 0 ~ 65536 之间

  • 在计算机中,有一些默认的端口号,最好不要去使用

    • http 服务的 80
  • 我们开发过程中使用一些简单好记的就可以了,例如 3000、5000等没什么含义

相关文章

  • node 学习笔记.md

    Node.js第一天 1. 初识Node.js 1.1 Node.js是什么 Node.js® is a Java...

  • 2018-08-30

    nodejs 学习第一天,学会在浏览器输出js。// node.js学习 var http = require('...

  • nodejs的第一天

    nodejs第一天学习 一、nodejs简介 Node.js 是一个基于 Chrome V8 引擎的 JavaSc...

  • nodejs安装

    Node.js安装 目录 Node.js简单介绍 windows安装Node.js Linux安装Node.js ...

  • node.js基础

    什么是node.js Node.js特点 node.js优点和缺点

  • Nodejs.2

    参考内容:Node.js EventEmitter 四、Node.js EventEmitter Node.js所...

  • nodejs第一步

    Node.js 是什么?Node.js与JavaScript的区别是什么? Node.js的优点?Node.js的...

  • Node.js学习

    主线:Node.js是什么 --> Node.js的组成 --> Node.js的特点 --> Helloworl...

  • 使用AngularJS搭建前台框架

    Node.js部署: 下载安装包:从Node.js官网下载Node.js安装包。 安装Node.js:打开node...

  • Node.js模块

    Node.js 模块和 Node.js 包介绍。 一、Node.js模块 每一个Node.js都是一个Node.j...

网友评论

    本文标题:Node.js 第一天

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