浅理解node.js

最近开始了解node.js,在这里把最近看的(七天学会nodejs)大概串一下,加深一下理解。

node.js是一个解析器——一种运行环境,允许JS使用运行环境提供的内置对象和方法做一些事情。例如fs/http内置对象。
           ——运行在服务端的JavaScript

1 先来个实际点的小例子,感受一下nodejs

var http = require(‘http‘);

http.createServer(function (request, response) {
  response.writeHead(200, {‘Content-Type‘: ‘text/plain‘});
  response.end(‘Hello World\n‘);
}).listen(8888);

console.log(‘Server running at http://127.0.0.1:8888/‘);

这样就创建了一个http服务器了。在http://127.0.0.1:8888上用浏览器访问,就可以看到输出的Hello World了。

2 模块

require  //引用模块 

main.js中引用其它模块

var hello=require(‘./hello.js‘);

exports  //导出对象给require改模块的模块使用

exports.hello=function(){console.log(‘hello world‘);}

function hello(){ console.log(‘hello world‘); } exports.hello=hello;

module //可访问当前模块的信息,主要用于替换模块的默认导出对象

注意:模块中的代码仅在初始化时执行一次,再次利用时调用缓存重复利用

当一个包中有多个模块,可将主模块名为index.js,或者package.json,通过目录作为访问包的入口(而不是文件路径);

package.json
{
  "name":"package"  //模块的当前文件夹所在的文件夹
  “main”:"./lib/main.js" //  / home /node/package/lib/xx.js
}
//访问模块
require(‘/home/node/package‘)  哈,一看就是访问包的感觉

4 npm

获取第三方包

下载第三方包  npm install agrv;

或者在package.json 里配置

{
    "name": "node-echo",
    "main": "./lib/echo.js",
    "dependencies": {
        "argv": "0.0.2"
    }
}

5 正式一点的,小文件的copy

var fs=require(‘fs‘) //内置文件模板
function copy(src,dst){
  fs.writeFileSync(dst,readFileSync(src))
}
function main(argv){
      copy(argv[0],argv[1]);
}
main(process.argv.slice[2]);//argv[0],argv[2]分别储存的执行程序和主模块的绝对路径

上述小文件属于一次性写入内存,一次性读出,会引起内存爆仓

大文件的写入(流水式)

var fs = require(‘fs‘);

function copy(src, dst) {
    fs.createReadStream(src).pipe(fs.createWriteStream(dst));(边读边写)
}

function main(argv) {
    copy(argv[0], argv[1]);
}

main(process.argv.slice(2));

6 event的对象,eventemitter 时间发射和事件监听功能的封装

每个事件有一个事件名(字符串)和若干参数组成,一个事件可以有多个事件监器

var events = require(‘events‘);
var emitter = new events.EventEmitter();
emitter.on(‘someEvent‘, function(arg1, arg2) { //注册事件监听器
    console.log(‘第一个事件‘, arg1, arg2);
});
emitter.on(‘someEvent‘, function(arg1, arg2) {
    console.log(‘第二个事件‘, arg1, arg2);
});
emitter.emit(‘someEvent‘, ‘byvoid‘, 1991); //发射事件,依次调用事件监听

eventemitter API:

eventemitter.on(event,listener);

eventemitter.once(event,listener);事件只用一次解除

eventemitter.removeListener(event,listener);移除事件

error是eventemitter的特殊事件

遇到异常是发射error事件,调用监听函数,避免程序崩溃

var events = require(‘events‘);
var emitter = newevents.EventEmitter();
emitter.on(‘error‘,function(){
   console.log(‘error‘)
})
emitter.emit(‘error‘); 

关于继承:大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、 http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。

7 全局变量

process:

process.argv 命令行参数数组

process.stdout/process.stdin

process.stdin.resume();
process.stdin.on(‘data‘, function(data) {
process.stdout.write(‘read from console: ‘ + data.toString());
}); 

process.nextTick(callback),为时间循环设置任务,下次循环响应事调用callback,把复杂的工作拆分成小时间,提高响应速度,节省响应时间(本人此处理解不太透)

(今天先写这些,以后接着写)

时间: 2024-08-27 23:24:04

浅理解node.js的相关文章

方便大家学习的Node.js教程(一):理解Node.js

理解Node.js 为了理解Node.js是如何工作的,首先你需要理解一些使得Javascript适用于服务器端开发的关键特性.Javascript是一门简单而又灵活的语言,这种灵活性让它能够经受住时间的考验.函数.闭包等特性使Javascript成为一门适合Web开发的理想语言. 有一种偏见认为Javascript是不可靠的,然而事实并非如此.人们对Javascript的偏见来源于DOM,DOM是浏览器厂商提供的用于Javascript与浏览器交互的API,不同浏览器厂商实现的DOM存在差异.

【火的不行的前端你必须知道】一、浅谈node.js

引子: 现在都2017年了,在这个前端盛行的年头,在不懂一些前端流行的技术就落伍了,恰好公司H5端项目也是让这个方向去替换. 技术选型: 这里主要是简单说一下,后面会分章节详细分析 1.react: 目前最流行的前端框架之一 2.nowa: webpack系列的一个web工具,打包,编译等 3.react-keeper: 一种路由框架 4.ES6,这个不用介绍了吧(眯眼笑) 5.antd-mobile:阿里蚂蚁出的一个前端框架,面对大部分素材够用了 6.no-flux;状态管理的一种组件  这些

理解Node.js的事件轮询

前言 总括 : 原文地址:理解Node.js的事件轮询 Node小应用:Node-sample 智者阅读群书.亦阅历人生 正文 Node.js的两个基本概念 Node.js的第一个基本概念就是I/O操作开销是巨大的: 所以,当前变成技术中最大的浪费来自于等待I/O操作的完毕.有几种方法能够解决性能的影响: 同步方式:按次序一个一个的处理请求.利:简单.弊:不论什么一个请求都能够堵塞其它全部请求. 开启新进程:每一个请求都开启一个新进程.利:简单:弊:大量的链接意味着大量的进程. 开启新线程:每一

【译】理解node.js事件轮询

Node.js的第一个基本论点是I/O开销很大. 当前编程技术中等待I/O完成会浪费大量的时间.有几种方法可以处理这种性能上的影响: 同步:每次处理一个请求,依次处理.优点:简单:缺点:任何一个请求都可以阻塞所有其他的请求. Fork一个新进程:开一个新进程来处理每个请求.优点:容易:缺点:不能很好的扩展,成百上千个连接意味着成百上千个进程.fork()函数相当于Unix程序员的锤子,因为它很有用,每个问题看起来就像一个钉子,通常会被过度使用.(译者注:直译比较拗口,我理解的意思是,Unix程序

理解Node.js(译文)

正文 当我向别人介绍Node.js 的时候一般会有两种反应,要么是立马就弄明白它是个什么玩意儿,要么是被它搞的很糊涂. 如果你现在还处于后者,下面就是我对于node的解释: 它是一个命令行工具,你可以下载一个tarball文件,编译然后安装源文件: 它可以让你在你的终端输入node my_app.js来运行Javascript程序: Node的JS代码是由 V8 javascript 引擎(就是那个使得Chrome如此之快的东西)所执行的: Node提供了诸如访问网络或是操作文件系统的Javas

浅谈Node.js单线程模型

Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型: 1.高并发 一般来说,高并发的解决方案就是多线程模型,服务器为每个客户端请求分配一个线程,使用同步I/O,系统通过线程切换来弥补同步I/O调用的时间开销,比如Apache就是这种策略,由于I/O一般都是耗时操作,因此这种策略很难实现高性能,但非常简单,可以实

理解 Node.js 里的 process.nextTick()

有很多人对Node.js里process.nextTick()的用法感到不理解,下面我们就来看一下process.nextTick()到底是什么,该如何使用. Node.js是单线程的,除了系统IO之外,在它的事件轮询过程中,同一时间只会处理一个事件.你可以把事件轮询想象成一个大的队列,在每个时间点上,系统只会处理一个事件.即使你的电脑有多个CPU核心,你也无法同时并行的处理多个事件.但也就是这种特性使得node.js适合处理I/O型的应用,不适合那种CPU运算型的应用.在每个I/O型的应用中,

【转】浅谈Node.js单线程模型

Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型: 1.高并发 一般来说,高并发的解决方案就是多线程模型,服务器为每个客户端请求分配一个线程,使用同步I/O,系统通过线程切换来弥补同步I/O调用的时间开销,比如Apache就是这种策略,由于I/O一般都是耗时操作,因此这种策略很难实现高性能,但非常简单,可以实

深入理解Node.js基于事件驱动的回调

回调和异步调用的关系 首先明确一点,回调并非是异步调用,回调是一种解决异步函数执行结果的处理方法.在异步调用,如果我们希望将执行的结果返回并且处理时,可以通过回调的方法解决.为了能够更好的区分回调和异步回调的区别,我们来看一个简单的例子,代码如下: function waitFive(name, function_name){ var pus = 0; var currentDate = new Date(); while(pus < 5000){ var now = new Date(); p