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的所有属性。

  • 相关阅读:
    在C#代码中应用Log4Net(二)典型的使用方式
    在C#代码中应用Log4Net(一)简单使用Log4Net
    Windows Azure Active Directory (2) Windows Azure AD基础
    Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
    Windows Azure Active Directory (1) 前言
    Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
    Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)
    Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
    Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
    Windows Azure HandBook (2) Azure China提供的服务
  • 原文地址:https://www.cnblogs.com/cnyaokai/p/6801669.html
Copyright © 2011-2022 走看看