zoukankan      html  css  js  c++  java
  • Node.js入门-通俗易懂版

    一、初始Node.js

    1.Node.js是什么?

    通俗的解释:

      Node.js = Javascript + 本地/服务器文件读写删除等功能。

      简单的说 Node.js 就是运行在服务端的 JavaScript。执行在浏览器上的时候成为JavaScript,执行在服务器上的时候叫做Node.js。当然写法是有区别的。

      JavaScript受限于浏览器沙盒模式,只能运行在浏览器中。而Node.js拓展了JavaScript的功能,使其可以运行在本地/服务器。

      它不是后端语言,但是可以用来写后端程序。

    特性: 

      Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。

      Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。

    2.Node.js的安装

    在官方网站下载长效支持版本(LTS)即可。可以使用 node -v 查看安装的node版本。

    3.node.js需要借助命令行界面来运行

      1)node的控制台模式

      在终端中输入 node可以进入node的控制台模式,进入之后命令行(终端)的符号会由$变为>,代表已经进入node的控制台模式。一个小例子:

      2)引入外部代码文件

      ① 如果要在控制台执行某个外部代码文件,比如执行index.js,我们可以用cd命令进入该目录之后输入 node index.js 

      ② 如果把其他的js文件引入到当前的js文件中,代码如下:

       var x = require ('./index2')  (引入当前目录下的index2.js到当前文件)

      control + c 是退出当前程序的组合键,我们可以使用 control + c 来退出node控制台模式。

    4.Node.js REPL(交互式解释器)

    REPL 命令

    • ctrl + c - 退出当前终端。

    • ctrl + c 按下两次 - 退出 Node REPL。

    • ctrl + d - 退出 Node REPL.

    • 向上/向下 键 - 查看输入的历史命令

    • tab 键 - 列出当前命令

    • .help - 列出使用命令

    • .break - 退出多行表达式

    • .clear - 退出多行表达式

    • .save filename - 保存当前的 Node REPL 会话到指定文件

    • .load filename - 载入当前 Node REPL 会话的文件内容。

     

    二、NPM

    1.什么是NPM?  

    NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具。

    它可以很方便地让JavaScript开发者下载、安装、上传以及管理已经安装的包。

    2.npm的使用

    2.1 npm的安装

    安装node.js之后,系统会自动安装npm。使用 npm -v 命令可以查看安装的版本号。

    2.2 初始化——新建工程项目

      命令: npm init 

      先用 cd 命令进入要操作的文件夹,然后使用 npm init 命令指定让npm控制当前目录。输入并回车之后会出现如下提示:

      在这里输入项目的名称、版本号、项目描述等信息,回车则填写括号里面的默认内容。

      初始化之后,文件夹中会有一个初始化配置文件package.json。

      Package.json 属性说明

    • name - 包名。

    • version - 包的版本号。

    • description - 包的描述。

    • homepage - 包的官网 url 。

    • author - 包的作者姓名。

    • contributors - 包的其他贡献者姓名。

    • dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。

    • repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。

    • main - main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。

    • keywords - 关键字

     

    2.3 全局安装与本地安装

      使用npm我们可以很方便的安装各种包。

      比如安装jQuery,可以这样写

         npm install jquery --save 

      如果想制定要安装的版本的jQuery,可以写:

         npm install jquery@2 --save npm 会自动安装jQuery2的最高版本。

      --save是安装到当前文件夹的意思,如果想安装到全局(全局依赖),可以使用 -g

        比如我们要全局安装gulp,可以使用  npm install gulp -g ,这时的安装路径为/usr/local/bin/(以MAC OS为例)

      使用-dev可以在配置文件中标注项目依赖了哪些包,写法  --save-dev (开发阶段一般使用这个)

        通过-Dev生成的配置文件里面注明了需要安装的包的清单,在多人共同开发时,通过这个配置文件,可以通过命令行(终端)快速安装自己电脑上面没有的包。通过命令行(终端)进入根目录,使用  npm install  命令可以根据dependencies配置安装所有的依赖包。

     

    2.4 使用淘宝 NPM 镜像  

      大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。

      淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟一次以保证尽量与官方服务同步。

      在命令行(终端)输入如下代码:

    npm install -g cnpm --registry=https://registry.npm.taobao.org

      然后就可以通过 cnpm install *** -save 的命令来安装各种包了。

    2.5 npm常用命令

      http://www.cnblogs.com/PeunZhang/p/5553574.html#npm-update

     

    三、commonJS模块

    1、什么是模块:

        模块是node.js应用程序的基本组成部分。

        每一个js文件都是一个模块。

        为了让Node.js文件相互调用而提供的系统称为模块系统。

        所有默认自带的模块直接用模块名就可以引用。

    2、创建一个应用(认识http模块)

      2.1 Node.js 应用由哪几部分组成?

      1.  引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。

      2.  创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

      3.  接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

      2.2 创建Node.js应用的步骤

        步骤一、引入 required 模块

          我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http,实例如下:

           var http = require("http"); 

        步骤二、创建服务器

          接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。

          函数通过 request, response 参数来接收和响应数据。

          实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码:

    var http = require('http');
    
    var server = http.createServer(function (request, response) {
       //这里的参数使用了回调函数,回调函数的执行是不按顺序的,不需要等待文件读取完,在读取文件的同时执行接下来的代码,大大提高了程序的性能
    // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end('Hello World '); })
    server.listen(
    8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/');

          (关于Node.js的回调函数更详细的介绍可以看这篇 http://www.runoob.com/nodejs/nodejs-callback.html )

          以上代码我们完成了一个可以工作的 HTTP 服务器。

          使用 node 命令执行以上的代码:

    node server.js
    Server running at http://127.0.0.1:8888/

          接下来,打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 "Hello World"的网页。

        小结:分析Node.js 的 HTTP 服务器:

      •  第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。
      •  接下来我们调用 http 模块提供的函数: createServer 。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。

    3. require方法

    原生模块与文件模块

      原生模块在nodejs安装时便存在,通过require(‘模块名’)引用。

      文件模块一般为用户建立—require(‘完整模块路径’)引用。引用了一个外部js文件,即引用了一个模块,也就是创建了一个模块。

    4. exports对象

    exports 是模块公开的接口。

    require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

    在一个 js 中通过 require('./xxx') 加载这个模块,然后就可以直接访 问 xxx.js 中 exports 对象的成员函数了。

    有时候我们只是想把一个对象封装到模块中,格式如下:

    module.exports = function() {
      // ...
    }

    例如:

    //hello.js 
    function Hello() { 
        var name; 
        this.setName = function(thyName) { 
            name = thyName; 
        }; 
        this.sayHello = function() { 
            console.log('Hello ' + name); 
        }; 
    }; 
    module.exports = Hello;

    这样就可以直接获得这个对象了:

    //main.js 
    var Hello = require('./hello'); 
    hello = new Hello(); 
    hello.setName('BYVoid'); 
    hello.sayHello();

    模块接口的唯一变化是使用 module.exports = Hello 代替了exports.world = function(){}。

    在外部引用该模块时,其接口对象就是要输出的 Hello 对象本身,而不是原先的 exports。

    module.exports与exports的不同

    •  module.exports可以让模块成为特别对象类型
    •  exports可以让模块成为传统的模块实例
    •  exports是module.exports的辅助方法
    •  module.exports.name 相当于 exports.name

     

    5. Node.js中也有全局对象的概念

      JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。

      在浏览器 JavaScript 中,通常 window 是全局对象,window在浏览器环境中可用(在浏览器的控制台中可用),node.js中没有window,所以dom对象在node.js中无效。

      而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。

      5.1 全局对象与全局变量

      global 最根本的作用是作为全局变量的宿主。

      当你定义一个全局变量时,这个变量同时也会成为全局对象的属性。

      注意: 永远使用 var 定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险。

      5.2 process

      process 是一个全局变量,即 global 对象的属性。

      process属性

        Process 提供了很多有用的属性,便于我们更好的控制系统的交互。

        在node控制台模式输入process并回车,可以看到process的所有属性。

  • 相关阅读:
    祖国,让我为您写首歌
    提升信任度,是做网络营销成功的必由之路
    名字作诗已成流行语,你“OUT”了吧?
    腾飞天涯
    沈阳首个文化强市评价体系出炉,为沈阳文化振兴打分
    寄语“官员诗人”车延高:我挺你
    “自己选的路,就算跪着也要走完”引热议
    我在月光下想你
    国庆献礼谁为重
    gcc和g++的区别
  • 原文地址:https://www.cnblogs.com/cnyaokai/p/6801669.html
Copyright © 2011-2022 走看看