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\n'); })
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的所有属性。

posted @ 2017-05-04 14:57  萌面君  阅读(698)  评论(0编辑  收藏  举报