Node.js = Javascript + 本地/服务器文件读写删除等功能。html
简单的说 Node.js 就是运行在服务端的 JavaScript。执行在浏览器上的时候成为JavaScript,执行在服务器上的时候叫作Node.js。固然写法是有区别的。node
JavaScript受限于浏览器沙盒模式,只能运行在浏览器中。而Node.js拓展了JavaScript的功能,使其能够运行在本地/服务器。jquery
它不是后端语言,可是能够用来写后端程序。git
Node.js 是一个基于Chrome JavaScript 运行时创建的一个平台。express
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度很是快,性能很是好。npm
在官方网站下载长效支持版本(LTS)便可。可使用 node -v 查看安装的node版本。json
在终端中输入 node能够进入node的控制台模式,进入以后命令行(终端)的符号会由$变为>,表明已经进入node的控制台模式。一个小例子:gulp
① 若是要在控制台执行某个外部代码文件,好比执行index.js,咱们能够用cd命令进入该目录以后输入 node index.js 后端
② 若是把其余的js文件引入到当前的js文件中,代码以下:浏览器
var x = require ('./index2') (引入当前目录下的index2.js到当前文件)
control + c 是退出当前程序的组合键,咱们可使用 control + c 来退出node控制台模式。
REPL 命令
ctrl + c - 退出当前终端。
ctrl + c 按下两次 - 退出 Node REPL。
ctrl + d - 退出 Node REPL.
向上/向下 键 - 查看输入的历史命令
tab 键 - 列出当前命令
.help - 列出使用命令
.break - 退出多行表达式
.clear - 退出多行表达式
.save filename - 保存当前的 Node REPL 会话到指定文件
.load filename - 载入当前 Node REPL 会话的文件内容。
NPM的全称是Node Package Manager,是随同NodeJS一块儿安装的包管理和分发工具。
它能够很方便地让JavaScript开发者下载、安装、上传以及管理已经安装的包。
安装node.js以后,系统会自动安装npm。使用 npm -v 命令能够查看安装的版本号。
命令: 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 - 关键字
使用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配置安装全部的依赖包。
你们都知道国内直接使用 npm 的官方镜像是很是慢的,这里推荐使用淘宝 NPM 镜像。
淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你能够用此代替官方版本(只读),同步频率目前为 10分钟一次以保证尽可能与官方服务同步。
在命令行(终端)输入以下代码:
npm install -g cnpm --registry=https://registry.npm.taobao.org
而后就能够经过 cnpm install *** -save 的命令来安装各类包了。
http://www.cnblogs.com/PeunZhang/p/5553574.html#npm-update
模块是node.js应用程序的基本组成部分。
每个js文件都是一个模块。
为了让Node.js文件相互调用而提供的系统称为模块系统。
全部默认自带的模块直接用模块名就能够引用。
引入 required 模块:咱们可使用 require 指令来载入 Node.js 模块。
建立服务器:服务器能够监听客户端的请求,相似于 Apache 、Nginx 等 HTTP 服务器。
接收请求与响应请求 服务器很容易建立,客户端可使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
咱们使用 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"的网页。
原生模块与文件模块
原生模块在nodejs安装时便存在,经过require(‘模块名’)引用。
文件模块通常为用户创建—require(‘完整模块路径’)引用。引用了一个外部js文件,即引用了一个模块,也就是建立了一个模块。
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的不一样
JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其全部属性均可以在程序的任何地方访问,即全局变量。
在浏览器 JavaScript 中,一般 window 是全局对象,window在浏览器环境中可用(在浏览器的控制台中可用),node.js中没有window,因此dom对象在node.js中无效。
而 Node.js 中的全局对象是 global,全部全局变量(除了 global 自己之外)都是 global 对象的属性。在 Node.js 咱们能够直接访问到 global 的属性,而不须要在应用中包含它。
global 最根本的做用是做为全局变量的宿主。
当你定义一个全局变量时,这个变量同时也会成为全局对象的属性。
注意: 永远使用 var 定义变量以免引入全局变量,由于全局变量会污染命名空间,提升代码的耦合风险。
process 是一个全局变量,即 global 对象的属性。
Process 提供了不少有用的属性,便于咱们更好的控制系统的交互。
在node控制台模式输入process并回车,能够看到process的全部属性。