node.js 学习笔记一
2017-05-01
安装node
我没安装,下载即使用。要全局使用的话把node加入到环境变量中即可。
以下命令环境均为 cmd 。
体验
体验一:
- 在命令行输入
node,即进入 node 程序。 - 再输入
console.log(1),回车,可以输出 1 。感觉就像浏览器控制台一样。
- 按两次
ctrl+c退出node程序。
体验二:
- 创建文件
t1.js,内容为console.log(1)。 - 在控制台输入
node t1.js,回车,可以输出 1 。感觉像浏览器执行了js文件一样。
体验感觉:
- 嗯是的,node 就是一个 js 解释器。基于谷歌浏览器的 v8 js 解释引擎。
- 与浏览器控制台不同的是,命令输入时浏览器控制台方便得多,浏览器可以方便换行和代码提示,但浏览器不支持直接运行js文件。
- node 不只是 js 解释器,还提供了一些系统级别的 api。
一些按键
- ctrl + c - 退出当前终端。
- ctrl + c 按下两次 - 退出 Node REPL。
- ctrl + d - 退出 Node REPL.
- 向上/向下 键 - 查看输入的历史命令
- tab 键 - 列出当前命令
- .help - 列出使用命令
- .break - 退出多行表达式
- .clear - 退出多行表达式
- .save filename - 保存当前的 Node REPL 会话到指定文件
- .load filename - 载入当前 Node REPL 会话的文件内容。
node服务器
- 创建文件
s1.js,内容为:
var http=require('http'); //使用 require 载入 http 模块。
http.createServer(function(request,response){
response.writeHead(200,{'Content-type':'text/plain'}); //writeHead 发送请求头
response.end('Hi'); //写入数据到请求主体,此句相当于 【response.write('Hi');response.end();】 。
}).listen(8888); //通过 listen 监听 8888 端口
console.log('服务开始了')
- 使用
node s1.js运行它,然后在访问http://127.0.0.1:8888/,就能看到输出的内容Hi。
注: 如果修改了 js 文件中的内容,需要再用 node 执行一下,才可以看到最新修改。
异步读取文本文件
var fs=require('fs');
fs.readFile('i1.txt',(err,data) => {
console.log(data);
console.log(data.toString());
})
console.log('读取文本')
输出:
读取文本
<Buffer 65 6e 20 e4 b8 ad e6 96 87 0d 0a>
en 中文
上面读取的 data 输出是 <Buffer ... ,为什么呢?而再加上 .toString() 可以正确输入中文。猜想前者是某种码,一般是二进制、
Buffer 在node中是全局变量,可用来处理二进制数据。
.toString() 用来解码。
()=>{} 是什么鬼?
有没有感觉上面的 () => {} 和 function(){} 很像?他们是不是一样的呢?
var fs=require('fs');
fs.readFile('i1.txt',function(err,data){
console.log(data);
console.log(data.toString());
})
console.log('读取文本')
把 => 改成 function 形式,发现输出相同。
但是:
(function(a){
console.log(a)
}(1));
// 下面这段代码就不能运行了。
((a) => {
console.log(a)
}(2));
原来箭头函数有这些问题:
函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
不可以使用yield命令,因此箭头函数不能用作Generator函数。
不了解还是少用好。
同步读取文本文件
var fs=require('fs');
var data=fs.readFileSync('i1.txt');
console.log(data.toString());
console.log('读取文本');
输出:
<Buffer 65 6e 20 e4 b8 ad e6 96 87 0d 0a>
en 中文
读取文本
上面几个例子的使用体验
上面我们使用了 var fs = require('fs') ,接着有 fs.readFile ,这个 fs 和 readFile 是什么鬼?
通过手册:http://nodejs.cn/api/ 可以看出来,http、fs是一个模块,也叫,与js比较。
- fs.readFile(file[, options], callback)
- window.open(URL,name,specs,replace)
那么,不用说什么,大家都能明白了,他们的概念很相似,所以说学 node 前端无需太多成本。所以对于查js手册已经很熟悉的我们来说,一下子就知道 node 手册的使用了,对学习和使用node是非常有利的。
事件
当事件发生时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
var events = require('events');
var eventEmitter = new events.EventEmitter(); // 创建事件发生器
eventEmitter.on('connection', function(){ // 绑定事件一
console.log('事件一处理程序');
eventEmitter.emit('data_received'); // 触发绑定事件二
});
eventEmitter.on('data_received', function(){ // 绑定事件二
console.log('事件二处理程序');
});
eventEmitter.emit('connection'); // 触发绑定事件一,事件二才触发
// 输出
// 事件一处理程序
// 事件二处理程序
var events=require('events');
var emitter=new events.EventEmitter();
emitter.on('someEvent',function(a,b){console.log('e1',a,b) });
emitter.on('someEvent',function(a,b){console.log('e2',a,b) });
emitter.emit('someEvent','参数A','参数B');
// 输出
// e1 参数A 参数B
// e2 参数A 参数B
- 不好理解呀。
Buffer 缓冲区
该类用来创建一个专门存放二进制数据的缓存区。
他的操作方法有写入、读取、转为JSON、合并、比较、拷贝、剪切等。
- 读取缓冲区数据: buf.toString([encoding[, start[, end]]])
- encoding - 使用的编码。默认为 'utf8' 。
- start - 指定开始读取的索引位置,默认为 0。
- end - 结束位置,默认为缓冲区的末尾。
buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
}
console.log( buf.toString('ascii')); //abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,3)); //abc
console.log( buf.toString('utf8',3,5)); //de
console.log( buf.toString(undefined,3,5)); //de 默认是utf-8
node.js 学习笔记一的更多相关文章
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Node.js学习笔记(2):基本模块
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- Node.js学习笔记(4):Yarn简明教程
Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...
- Node.js学习笔记(一)
1.回调函数 node是一个异步事件驱动的平台,所以在代码中我们经常需要使用回调函数. 例: setTimeout(function(){ console.log('callback is calle ...
- Node.js学习笔记(一):快速开始
最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- node.js学习笔记(三)——事件循环
要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...
随机推荐
- plsql 代码自动补全
1.新建一个文件,命名不限定,文件内容为自动补全内容,比如: i=INSERTu=UPDATEs=SELECTf=FROMw=WHEREo=ORDER BYd=DELETEdf=DELETE FROM ...
- superblock 区块数据读取
鸟哥私房菜笔记: 命令:df -Th Filesystem:代表该文件系统是在哪个 partition ,所以列出设备名称:1k-blocks:说明下面的数字单位是 1KB 呦!可利用 -h 或 -m ...
- springboot报错Whitelabel Error Page
第一次使用springboot没有问题.隔了两天继续看.一直报错Whitelabel Error Page. 重新搭建试了任何方法都错了. 报的就是一个404错误,犯了一个习惯性错误,一般都是loca ...
- vue生命周期图示中英文版Vue实例生命周期钩子
vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...
- hud1007 Quoit Design
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> # ...
- flask框架----蓝图
蓝图(flask中多py文件拆分都要用到蓝图) 如果代码非常多,要进行归类.不同的功能放在不同的文件,吧相关的视图函数也放进去.蓝图也就是对flask的目录结构进行分配(应用于小,中型的程序), 小中 ...
- iOS项目之解析HTML数据
最近因为需求,一直在做HTML数据的解析,从网页中去获取需要的数据,然后展示到自己的app中. 在网上找了很多资料,大多都是TFHpple这个第三方框架,能够根据标签节点获取对应的数据,但是现在我需要 ...
- 【js】手机浏览器端唤起app,没有app就去下载app 的方法
这种功能的作用: 1.一般公司有自己的app,而app是需要不断有新用户涌入才能持续运营,达到不错的收入.就需要使用这种方式进行引入新的用户. 2.一些内容在网页端体验不好,或者一些功能需要app内才 ...
- 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)
上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试. Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具.从Selenium 2.0开始Seleniu ...
- 建议使用nginx配合uwsgi,
试试gunicorn+supervisor+nginx. gunicorn是Python实现的的Web server,配置也比较简单. supervisor也是Python实现的,它用于进程管理. 这 ...