http://www.yiibai.com/nodejs/node_install.html---node.js具体入门资料在此


Node JS事件循环

Node JS是单线程应用程序,但它通过事件和回调概念,支持并发。 由于Node JS每一个API是异步的,作为一个单独的线程,它使用异步函数调用,以保持并发性。Node JS使用观察者模式。Node线程保持一个事件循环,每当任何任务得到完成,它触发这标志着该事件侦听器函数执行相应的事件。

事件驱动编程

Node.js大量使用事件,这也是为何Node.js是相当快相对于其他类似的技术。当Node启动其服务器,它可以简单地启动它的变量,声明的函数,然后简单地等待发生的事件。

在事件驱动的应用中,通常主循环监听事件,然后触发回调函数时被检测到这些事件之一。

尽管事件似乎类似于回调。不同之处在于如下事实,当异步函数返回其结果的回调函数被调用的地方作为对观察者模式的事件处理。 监听事件的功能作为观察员。每当一个事件被触发,它的监听函数就开始执行。Node.js具有多个内置通过事件模块和用于将事件绑定和事件侦听,如下EventEmitter类可用事件:

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

以下为事件处理程序绑定使用事件的语法:

// Bind event and even handler as follows
eventEmitter.on('eventName', eventHandler);

我们可以通过编程触发一个事件,如下所示:

// Fire an event
eventEmitter.emit('eventName');

例子

创建一个名为具有以下代码main.js一个js文件:

// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter(); // Create an event handler as follows
var connectHandler = function connected() {
console.log('connection succesful.'); // Fire the data_received event
eventEmitter.emit('data_received');
} // Bind the connection event with the handler
eventEmitter.on('connection', connectHandler); // Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
console.log('data received succesfully.');
}); // Fire the connection event
eventEmitter.emit('connection'); console.log("Program Ended.");

现在让我们试着运行上面的程序作为检查的输出:

$ mnode main.js

这将产生以下结果:

connection succesful.
data received succesfully.
Program Ended.

Node应用程序是如何工作的?

在Node应用程序,任何异步函数接受回调作为最后的参数和回调函数接受错误的第一个参数。我们再看一下前面的例子了。创建一个名为input.txt的有以下内容的文本文件

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

创建一个名为具有以下代码的main.js一个js文件:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
if (err){
console.log(err.stack);
return;
}
console.log(data.toString());
});
console.log("Program Ended");

这里fs.readFile()是一个异步函数,其目的是要读取文件。如果在文件的读出发生了错误,则er对象将包含相应的错误,否则数据将包含该文件的内容。readFile传递err和数据,回调函数后,文件读取操作完成,并最终打印的内容。

Program Ended
Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

模块全局安装和本地安装的区别

如果一个包是要当做命令一样的来使用,就推荐进行全局安装,如下

$ npm -g install the_module_name

而如果一个包是使用在项目里面的话,则使用本地安装,这样避免了不同项目对不同版本的包之间的相互依赖的问题,如下

$ npm install the_module_name

具体区别:
1.安装位置:
npm install moduleName ,则是将模块下载到当前命令行所在目录。
npm install moduleName -g ,模块将被下载安装到全局目录中,即Node的安装目录下的node_modules下 2.调用方式:
在代码中,本地安装可以直接通过require()的方式引入;var moduleName = require('moduleName');
全局的安装是供命令行(command line)使用的,比如grunt,全局安装的方式是没有办法用require调用包的;
[注]:卸载模块包时也分全局和本地(-g),而且

$ npm ls -g 验证全局包
$ npm ls  验证本地包
 

react,react native,webpack,ES6,node.js----------今天上午学了一下node.js的更多相关文章

  1. React/React Native 的ES5 ES6写法对照表

    //es6与es5的区别很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component ...

  2. React/React Native 的ES5 ES6写法对照表-b

    很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教 ...

  3. scss + react + webpack + es6

    scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...

  4. 利用Webpack+React(antd)+ES6+python(flask)实现代码转换

    之前的几篇博客是将flask 结合 antd本地化,但是这样使得antd无法按需加载(也不支持ES6的语法),而且在写的过程中还需要把每个组件都用antd对象,这样的做法虽然是实现了antd的本地化, ...

  5. 使用scss + react + webpack + es6实现幻灯片

    写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果:我的github上的 JS代码 或者 观看慕课提供的课程 ...

  6. React Native是一套使用 React 构建 Native app 的编程框架

    React Native是一套使用 React 构建 Native app 的编程框架 React Native at first sight what is React Native? 跟据官方的描 ...

  7. [React] react+redux+router+webpack+antd环境搭建一版

    好久之前搭建的一个react执行环境,受历史影响是webpack3.10.0和webpack-dev-server2.7.1的环境,新项目准备用webpack4重新弄弄了,旧的记录就合并发布了(在没有 ...

  8. webpack构建多页面react项目(webpack+typescript+react)

    目录介绍 src:里面的每个文件夹就是一个页面,页面开发相关的组件.图片和样式文件就存放在对应的文件夹下. tpl:里面放置模板文件,当webpack打包时为html-webpack-plugin插件 ...

  9. Web 开发的未来:React、Falcor 和 ES6

    Web 开发的未来:React.Falcor 和 ES6 Widen是一家数字资产管理解决方案提供商.目前,其技术栈还非常传统,包括服务器端的Java.浏览器端的AngularJS.提供REST AP ...

随机推荐

  1. Eclipse修改工程名字

    1:修改项目目录下:.project文件 <?xml version="1.0" encoding="UTF-8"?> <projectDes ...

  2. web报表工具FineReport常用函数的用法总结(数学和三角函数)

    最后一次抛砖引玉了,至此finereport所有的常见函数就分享完了,期待能对大家有些许帮助. ABS ABS(number):返回指定数字的绝对值.绝对值是指没有正负符号的数值. Number:需要 ...

  3. iOS课程表

    最近在做课程表,刚开始的时候完全不知道那个周课表的网格是怎么实现的有木有,各种查资料,寻思路,只找到一个安卓版的.没事,咱要的是思路而已.可能思路不是最优的,但还是总结一下,也希望能给其他人一点思路. ...

  4. java--加强之 eclipse开发工具

    转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9943899 1.eclipse及IDE开发工具介绍 1.MyEcliose原本是Eclipse ...

  5. Hadoop Bloom Filter 使用

    1.Bloom Filter  默认的 BloomFilter filter =new BloomFilter(10,2,1); // 过滤器长度为10 ,用2哈希函数,MURMUR_HASH (1) ...

  6. how tomcat works 读书笔记 十一 StandWrapper 上

    方法调用序列 下图展示了方法调用的协作图:  这个是前面第五章里,我画的图:  我们再回顾一下自从连接器里  connector.getContainer().invoke(request, resp ...

  7. 杭电ACM 1001题

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=ne ...

  8. JavaScript 将两个数组合并,且删除重复的值

    var a=[1,2,3,4,5,8,9,10]; var b=[6,7,8,9,10]; var c = a.concat(b);//合并成一个数组 console.log(c) temp = {} ...

  9. 基于one2team框架的Highcharts图表图片导出方案

    这篇文章已经没有什么意义了,新版的HIghcharts提供Java图片导出解决方案,你需要做的就是下个Maven,bulid一个war就Ok了.---addedy on 2012-11-15 多说一句 ...

  10. 从输入一个URL到页面完全显示发生了什么?

    这是经典的前端问题,主要是对浏览器的工作原理有个理解! 网络通信走的一般是五层因特网协议,详见下图.图片来自于https://images2018.cnblogs.com/blog/882926/20 ...