什么是node.js
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的更多相关文章
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
- node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法
1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
- Node.js入门(一)
一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- Node.js入门
开始之前,安利一本正在看的书<站在两个世界的边缘>,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间.OK,有兴趣的可以看一看. node.js如标题一样,我也是刚开始接触,大家一起 ...
随机推荐
- 使用阿里云的Maven仓库加速Spark编译过程
前言 在国内编译Spark项目需要从Maven源下载很多依赖包,官方源在国内大环境下的下载速度大家都懂得,那个煎熬啊,简直是浪费生命. 如果你的下载速度很快,你现在就可以无视这篇文章了. 阿里云给国内 ...
- 安装Sphere v2.7 遇到的问题
今天在安装Sphere v2.7 的时候,提示错误: /home/lgj/nist/lib/libsphereCombinedLibs.a(shorten.o): In function `short ...
- 从0移植uboot (二) _启动流程分析
经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合 ...
- 【排序算法】快速排序算法 Java实现
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 基本思想 先从数组中找出一个数作为基 ...
- python的解释器spython介绍
Python解释器spython介绍 简介 出于个人爱好和某种需求,我再16年对python的解释器产生了浓厚兴趣,并且下定决心重新实现一个版本.我个人再游戏服务器开发中,对c++嵌入lua和pyth ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- echarts动态添加数据(饼图为例)
$.ajax({type : "POST",async : false,url : '${ctx}/basic/bsAllPictureGuarantee/pictJson',da ...
- .net平台的rabbitmq使用封装
前言 RabbitMq大家再熟悉不过,这篇文章主要整对rabbitmq学习后封装RabbitMQ.Client的一个分享.文章最后,我会把封装组件和demo奉上. Rabbitmq的运作 从下图可以看 ...
- 解决CenOS 7下启动ActiveMQ时报错
基于 CentOS 7,ActiveMQ 5.9.1 问题重现 在 CentOS 7 下安装好ActiveMQ后,执行 /usr/local/apache-activemq-5.9.1/bin/act ...
- 抓包工具Wireshark的使用
WireShark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息. WireShark界面简介 启动WireShark的界面如下: 选择网卡 wireshar ...