1.0什么是nodejs

1.1定义:

Node.js是Javascript除了浏览器之外可以运行的另一个环境(runtime)。可以为我们提供开启服务功能和提供文件读写功能

1.2特点:

1)基于google浏览器的v8引擎

2)事件驱动、非阻塞I/O

3)因为第二个特点,nodejs相比其它的后台语言要高效、轻量。

4)开源并且跨平台。

.net: 闭源,只能在window系统下面运行(非常尴尬)

java: 开源,跨平台

1.3学习网站:

1)nodejs.org

评价:nodejs的官网,主要作用是下载nodejs的版本,以及查看它的帮助文档

2)npmjs.com

评价:nodejs的开源包管理网站,将来如果某些功能在nodejs还不存在,可以直接去npm中找对应的开源包,或者自己有一些好的点子写成了代码,也可以放到npm上(缺点:是一个国外网站,而且是纯英文的)。

淘宝也通过将国外的网站所有包下载下来做了一个克隆版本(镜像地址:https://npm.taobao.org/),这个镜像版本仅仅只是为了提高国内开发人员的下载速度,并不是说它里面的内容是中文的。

3)github.com

评价:全球最大的开源托管库,可以在上面找各种程序的源代码以及分享源文件

4)stackoverflow.com

评价:全球最大的问答社区

5)google.com

评价:搜索技术文章或者解决程序上的一些问题(一般建议上google)

2.0node的使用:

nodejs运行有两种模式:

1)REPL:交互式运行环境(给开发人员的测试的模式)

在shell中直接输入node敲击回车,会进入REPL模式。可以在这个模式下面自己写一些js代码来测试效果。

REPL环境中的常用指令:

  • ctrl + c 两次:退出REPL环境
  • ctrl + d 一次:退出REPL环境
  • .exit 退出REPL环境
  • ↑↓:查看RPEL的历史操作记录
  • _: 得到上一次操作的结果
  • tab(tab键):查看nodejs中的API
  • .save fileName:以js文件的形式将当前REPL会话保存到硬盘中
  • .load fileName: 将硬盘中的js文件以REPL的形式读取出来

2)正常开发模式(执行js文件)

使用步骤:

1)写好一个js文件

2)在js文件所在的位置打开powershell,输入指令node fileName.js能得到js的执行结果。

3)也可以在sublime中安装terminal插件(ctrl+shift+p ->package controll:install -->terminal)

案例:用nodejs写一个js文件去执行,再写一个服务器去给大家访问

3.0nodejs的常用API:

1)global对象:

作用:全局对象。类似于javascript中的window对象

什么是全局对象:在nodejs中,所有的js都有运行在node环境下的,在这个环境中可以直接使 用很多方法和属性,而管理这些方法和属性的对象就叫做全局对象。

golbal中的方法和属性:

1. global.setTimeout(function(){},time);

//异步执行的方法

2. global.setImmeditate(function(){})

//异步执行的方法(优先级要高于setTimeout)

对比:process.nextTick(function(){});//异步执行的另一个方法(优先级比上面两个都高)

总结:三个方法都是异步执行的代码,如果同时放在一起,nextTick优先级最高,setImmediate其次,setTimeout最低。常用的是setTimeout.

全局对象中的方法在任何js文件中都可以直接使用,不需要通过require方法再单独导包。而其它非全局对象中的方法如果要使用的话需要导包(如:要使用http中的方法需要require('http'))

3. __dirName:得到当前文件所在的路径(这个属性虽然是列在全局对象,但是它得到的却是具体某个js文件中的路径,也就是说每个文件都有一个。每个文件中都有的对象我们把他叫做伪全局对象)

对比:process.cwd:得到当前文件的执行路径:执行路径与文件所在路径不一样

4. __fileName: 得到当前文件的全路径(物理路径+文件名),它与__dirName一样,也是一个伪全局对象。

5. process对象:

process.abort()//立即结束js代码的运行,下面的代码不再执行

process.arch() //得到当前运行环境所在平台

porcess.argv() //得到当前文件的执行参数

返回值为一个数组,数组中的第一个值,第二个值为默认值,分别为当前repl环境的执行进程,以及当前node执行的js文件的绝对路径(__fileName)

如果将来执行js文件的时候手动传入了参数,那么这些参数会按顺序被添加到argv的数组中。

应用:写一个命令行版的小型计算器

process.env //得到当前操作系统中环境变量

应用:用于区别生产环境和正式环境(通过执行时传入set 变量值=变量名 && node 运行程序来执行。注意:powershell中不认识&&指令,必须要去cmd中执行)

process.stdout.write()//输出内容

console.log的底层其实就是通过这个方法来输出的。

process.stdout.write输出的只能是字符串,并且不带换行

应用:使用这个方法完成命令行的小动画

process.stdin //监控输入的对象

process.stdin.on('readable',function(){})//当输入内容敲击回车时会触发这个事件中的回调函数

process.stdin.read();

得到在输入回车前输入的内容(以二进制的形式得到的,如果直接输出会以buffer数组的形式输出,toString以后才会转为字符串)

2) root对象

这个对象与global对象是一样的都是一个全局函数(可以理解为root是global的别名)

小练习:在不引入其它的文件的基础上在一个文件中引入另一个文件中的变量

注意点: 在REPL环境中定义的所有的变量都会加载到全局对象中,在单个js文件的中定义的变量,只要不是定义在全局对象上,是不会加载到全局环境中。

什么是node.js的更多相关文章

  1. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  2. 利用Node.js的Net模块实现一个命令行多人聊天室

    1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...

  3. Node.js:进程、子进程与cluster多核处理模块

    1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...

  4. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  5. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  6. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  7. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  8. Node.js入门(一)

    一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...

  9. Node.js学习笔记——Node.js开发Web后台服务

    一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...

  10. Node.js入门

    开始之前,安利一本正在看的书<站在两个世界的边缘>,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间.OK,有兴趣的可以看一看. node.js如标题一样,我也是刚开始接触,大家一起 ...

随机推荐

  1. 原生js实现轮播图

    原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...

  2. javascript的方法

    1. decodeURIComponent() decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码. 语法: decodeURI ...

  3. Linux系统(一)文件系统、压缩、打包操作总结

    序言 当前的形势,.Net已经开源,.Net Core 正在跨平台,可见微软巨人在努力,在改变,在进步,在走向春天.从前被微软供作上帝的.Net从业者,如果不打开心扉面向开源,改变自己,那么很可能在不 ...

  4. Linux学习笔记(1)

    一.介绍 Linux系统作为服务器操作器的两大优点是其稳定性以及安全性:常见的Linux系统有以下几种: Debian(1993年下半年出的Linux分支) Ubuntu(目前互联网公司使用的比较多的 ...

  5. 每天一个Linux命令(15)--tail命令

    tail 命令从指定点开始将文件写到标准输出.使用  tail  命令的  -f  选项可以方便的查阅正在改变的日志文件 , tail  -f  filename  会把  filename  里最尾 ...

  6. Linux 搭建Zookeeper集群

    1.使用root创建zookeeper用户:     useradd zookeeper:     passwd  zookeeper; 2.登录zookeeper用户,将下载的zookeeper-3 ...

  7. lxc.conf解析&lxc容器能力

    lxd启动容器实际是生成lxc.conf.剩下的就是LXC对容器进行控制了.所以可认为lxc.conf就是lxd和lxc之间主要的接口.lxc.conf详细属性参考: http://manpages. ...

  8. Eclipse-ee 启动Tomcat后浏览器无法访问Tomat,并且Web项目服务部署

    环境: Ubuntu 14.04 + Eclipse-ee +  Tomcat7 问题: 在Eclipse中建立Server时选择的Tomcat7,Server的运行时选择的时自己安装的Tomcat目 ...

  9. [LeetCode] Dp

    Best Time to Buy and Sell Stock 题目: Say you have an array for which the ith element is the price of ...

  10. 2761: [JLOI2011]不重复数字(平衡树)

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2133  Solved: 825[Submit][Stat ...