nodejs概念:

让javascript运行在服务端的开发平台。不是一种语言,不是框架,不是库。特点:单线程异步、事件驱动。

PHP、JAVA既是语言也是平台。

创始人:Ryan

nodejs cmd 命令:

node -v //查看nodejs版本

node -e "console.log('ok')" //eval解析javascript语言

node 回车 //进入编译模式

npm list //查看目录下安装包

npm install -g 包名 //安装全局包

nodejs 创建http服务器:

var http=require('http')
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Pcat</p>');
}).listen(3000);
console.log('HTTP server is listening at port 3000');

nodejs 工具安装:

npm install -supervisor -g  //全局安装supervisor

nodejs 文件读取:

异步读取:

var fs=require('fs');
fs.readFile('file.txt','UTF-8',function(err,data){
if(err){
console.log('read file err');
}else{
console.log(data)
}
})
console.log('end');

同步读取:

var fs=require('fs');
var data=fs.readFileSync('file.txt','UTF-8');
console.log(data);
console.log('end');

nodejs 事件:

//声明事件对象
var EventEmitter=require('events').EventEmitter;
var event=new EventEmitter(); //注册事件
event.on('some_event',function(){
console.log('这是一个自定义事件')
}) //触发事件
setTimeout(function(){
event.emit('some_event');
},3000)

nodejs事件循环机制,所有逻辑都是事件的回调函数。

模块:

js文件,使用exports暴露公开接口,通过require函数引入模块,返回一个对象。文件可能是javascript代码、JSON或者编译过的C/C++扩展。

module.js

var name;
exports.setName=function(thyName){
name=thyName;
}
exports.sayHello=function(){
console.log('hello '+name);
}

getModule.js

var myModule=require('./module');
myModule.setName('marico');
myModule.sayHello();

问题:调用多次会如何输出?

var myModule1=require('./module');
myModule1.setName('marico');
var myModule2=require('./module');
myModule2.setName('kathra');
myModule1.sayHello();

结果为:kathra

问题:如何做到多次调用?

module.js

function hello(){
var name;
this.setName=function(thyName){
name=thyName;
}
this.sayHello=function(){
console.log('hello '+name);
}
}
//exports.hello=hello;
module.exports=hello;

getModule.js

//var hello=require('./module').hello;
var hello=require('./module');
var he=new hello();
he.setName('marico');
he.sayHello();
var he2=new hello();
he2.setName('kathra');
he2.sayHello();

包:

模块基础上更深一步的抽象,CommonJS规范的包应该具有以下特征:

1.package.json必须在包的顶层目录下

2.二进制文件应该在bin目录下

3.javascript代码应该在lib目录下

4.文档应该在doc目录下

5.单元测试应该在test目录下

nodejs对包要求并没有那么严格,只要顶层目录下有package.json,并符合基本规范即可。

nodejs在调用某个包时,会检查包中package.json文件的main字段,将其作为包的接口模块,如果package.json或main字段不存在,会尝试寻找index.js或index.code作为包的接口。

package.json的规范属性:

name:包的名称,必须唯一

description:包的简要说明

version:版本

keywords:关键字

maintainers:维护者数组,每个元素要包含name、email、web可选字段

contributors:贡献者数组,格式同maintainers,第一个为包作者

bugs:提交bug的地址,可以是网址或者电子邮件地址

licenses:许可证数组,每个元素要包含type和url字段

repositories:仓库托管地址数组,每个元素要包含type、url和path字段

dependencies:包的依赖,一个关联数组,由包名称和版本号组成

试听笔记:技术狂人nodejs的更多相关文章

  1. NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法

    个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现. 摘录自网络 地址: https://github.com/chyingp/nodejs-learning-guid ...

  2. NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇

    个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...

  3. NodeJS学习笔记 进阶 (1)Nodejs进阶:服务端字符编解码&乱码处理(ok)

    个人总结:这篇文章主要讲解了Nodejs处理服务器乱码及编码的知识,读完这篇文章需要10分钟. 摘选自网络 写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道.编解码一旦处理不当,就会出现 ...

  4. Hadoop笔记——技术点汇总

    目录 · 概况 · Hadoop · 云计算 · 大数据 · 数据挖掘 · 手工搭建集群 · 引言 · 配置机器名 · 调整时间 · 创建用户 · 安装JDK · 配置文件 · 启动与测试 · Clo ...

  5. Spark SQL笔记——技术点汇总

    目录 概述 原理 组成 执行流程 性能 API 应用程序模板 通用读写方法 RDD转为DataFrame Parquet文件数据源 JSON文件数据源 Hive数据源 数据库JDBC数据源 DataF ...

  6. JVM笔记——技术点汇总

    目录 · 初步认识 · Java里程碑(关键部分) · 理解虚拟机 · Java虚拟机种类 · Java语言规范 · Java虚拟机规范 · 基本结构 · Java堆(Heap) · Java栈(St ...

  7. Netty笔记——技术点汇总

    目录 · Linux网络IO模型 · 文件描述符 · 阻塞IO模型 · 非阻塞IO模型 · IO复用模型 · 信号驱动IO模型 · 异步IO模型 · BIO编程 · 伪异步IO编程 · NIO编程 · ...

  8. 【前端学习笔记】2015-09-09~~~~nodejs中的require()和module.exports

    nodejs中一个js文件就可以看做是一个模块 在node环境中,可以直接var a=require('模块路径以及不带扩展名的模块名') exports---module.exports 其中nod ...

  9. NodeJS学习笔记 进阶 (11)Nodejs 进阶:调试日志打印:debug模块

    个人总结:读完这篇文章需要5分钟,讲解了debug模块的使用 摘选自网络 前言 在node程序开发中时,经常需要打印调试日志.用的比较多的是debug模块,比如express框架中就用到了.下文简单举 ...

随机推荐

  1. ios企业应用发布流程

    转载自:http://blog.csdn.net/justinjing0612/article/details/8758692留作备忘 企业发布app的 过程比app store 发布的简单多了,没那 ...

  2. Get与Post数据长度的限制

    这个问题在我的开发中也遇到,所以在此贴出来(也是在网上搜出来的,呵呵)这是原贴地址http://blog.csdn.net/somat/archive/2004/10/29/158707.aspx两个 ...

  3. Hibernate创建hqll时报错

    Hibernate 问题,在执行Query session.createQuery(hql) 报错误 出错截图: 这条语句在java运行环境下,直接连数据库不出错,如果在hiberante,strut ...

  4. 416. Partition Equal Subset Sum

    题目: Given a non-empty array containing only positive integers, find if the array can be partitioned ...

  5. python基础——map/reduce

    python基础——map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Pro ...

  6. C++中实现对象的clone()

    在C#中,许多对象自动实现了clone函数,在C++中,要拷贝一个对象,除了自定义一个拷贝构造函数来实现对象复制外,还可以像C#中那样实现一个clone函数,这需要借助编译器实现的一个隐藏拷贝构造函数 ...

  7. XMPP框架下微信项目总结(8)图片发送

    前言:“图片”发送和“聊天文本”都是通过模块发起的成为:“消息模块”(反正传递的都是字符串) 发送原理:     1 current客户端获取本地图片 2 xmpp发送“字符串”(为什么是字符串?1: ...

  8. hdu 1290 切糕

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1290 思路: n条直线最多能将一个平面分成几个区域其递推公式即为:f(n)=f(n-1)+n:递推一下 ...

  9. Spring学习笔记—Spring之旅

    1.Spring简介     Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...

  10. Delphi强制类型转化和类型约定

    强制类型转换时一种技术,通过它能够使编译器把一种类型的变量当做另一种类型. 由于Pascal有定义新类型的功能,因此编译器在调用一个函数时候对形参和实参类型匹配的检查是非常严格的.因此为了能够通过编译 ...