文档章节

学习 Node.js 笔记(二)

刘军兴
 刘军兴
发布于 2015/11/26 16:54
字数 908
阅读 55
收藏 1
点赞 0
评论 0

继续学习 Node.js

== 文件操作 ==

NodeJS 对比浏览器中的 js 重点(进步)是能操作文件... 通过内模块 `fs' (文档...)

实验一下, 进入 node 交互命令行:

> var fs = require('fs'); // 引入 fs 模块
undefined  // node 响应
> fs   // 显示一下 fs 这个对象
 ... ... ... 大量内容, 对象被显示出来...
> var temp = fs.readFileSync('hell.txt');
> temp;  // 显示读入的是什么
<Buffer 12 34 56 ... 一大堆二进制表示的字节吧... >

(至少能快速实验一下)
后面又实验了一下, fs 似乎初始就有此变量, 不需要 require ...?

API 走马观花

可以看官方文档(估计需要再去查), 如 https://nodejs.org/api/buffer.html

似乎(缺省?)可用对象: assert, buffer, child_process, cluster, console, ... (内建?)

NodeJS 带一个内建的调试器:

$ node debug hello.js
< Debugger listening on port xxxx 
debug> . ok
...
debug>help
Commands: run (r), cont (c), next (n), step (s), out (o), backtrace (bt), 
setBreakpoint (sb), clearBreakpoint (cb), watch, unwatch, watchers, 
repl, restart, kill, list, scripts, breakOnException, breakpoints, version
debug>

虽然有点简陋, 但总比没有强...

 

NodeJS 最精华的异步 IO 模型在 fs 模块中有体现:

fs.readFile(filename, function(err, data) {
  if (err) deal-with-error;
  else deal-with-data;
});

示例: 通过 同步读取目录/文件 => 递归 => 回调 实现 travel(dir, callback) -- 目录遍历函数.
   也有异步版本, 要是没有必要, 还是暂时不学异步版了.

 

 

== 网络操作 ==

NodeJS 可以编写一些服务器端程序来协助前端开发和测试. (例如做 WebSocket 服务器)

实现 hello-world 的 web-server 例子(略).

对应模块有 http, https, url, querystring, net, socket 等.
这里很多需要 socket, http协议知识. (知识太多,学不过来...)

zlib 模块可能也需要, 对于那些带压缩的 http 数据.

 

== 进程管理 ==

通过产生新进程, nodejs 能够调用(别的)终端命令(或程序) 来做事情(像 shell,批处理)

(这是一种强大的思想和能力, 自己花时间做不如用别人现成的, 现成没有或不足用再自己干...)

var worker = require('child_process');
worker.exec('copy x y', callback() {
    print('Work complete~');
  });

注: 子进程是异步运行的(应该说是自己独立运行的), 通过回调函数返回执行结果.

进程间通信: 如果父子进程都是 nodejs 进程, 则可通过 IPC 双向传递数据.

process.on('message', callback(msg) { ... });  收到(父进程传递来的)该消息时做处理... (这里像 websocket)
msg 在发送端用 JSON.stringify 序列化, 接收端用 JSON.parse 反序列化.

 

 

== 异步编程 ==

NodeJS 最大的卖点 --- 事件机制,异步IO.

直接体现是回调. (前面见到很多了)

异步编程有特有的代码设计模式.
   同步下:                  异步下:
   函数返回值    -->    回调函数
   遍历数组       -->    串行处理(如果可并行处理, 需更多特定标志)
   异常处理       -->    回调中额外带 err (catch 住的异常)参数.

异常增加了编程复杂度. (如果没有效益, 还是少用为好...)

 

== 域 ==

NodeJS 提供 domian 模块, 可以简化异步代码的异常处理. 简而言之, 一个域是一个 JS 运行环境.

NodeJS 的大量 API 使用 C/C++ 实现的, 如果运行过程中出现异常可能会打断正常代码执行流程,
导致 C/C++ 部分有异常, 进而导致xxx. 最好处理完异常后重启程序...

 

 

== 一个大的示例 ==

通过多次迭代开发(演示)一个简单静态文件合并 server. (略)

 

原作者建议:
   1. 要熟悉官方 API 文档.
   2. 要先设计再实现.
   3. 要实现后再设计. (意思是要迭代)
   4. 要充分利用三方包.
   5. 不要迷信三方包.

(END)

© 著作权归作者所有

共有 人打赏支持
刘军兴
粉丝 54
博文 150
码字总数 226172
作品 0
昌平
一点感悟:《Node.js学习笔记》star数突破1000+

写作背景 笔者前年开始撰写的《Node.js学习笔记》 github star 数突破了1000,算是个里程碑吧。 从第一次提交(2016.11.03)到现在,1年半过去了。突然有些感慨,想要写点东西,谈谈这期间的...

程序猿小卡_casper ⋅ 06/06 ⋅ 0

细谈Node.js----我的笔记

学习心得 如何利用Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的 Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。N...

crossmix ⋅ 2016/01/04 ⋅ 0

Centos 7 下 GitBook 的安装与使用

文前说明 作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。 本文仅供学习交流使用,侵权必删。 不用...

羽杰 ⋅ 2017/09/21 ⋅ 0

moro:一个用于追踪工作时间的命令行生产力工具

保持对你的工作小时数的追踪将让你知晓在一个特定时间区间内你所完成的工作总量。在网络上有大量的基于 GUI 的生产力工具可以用来追踪工作小时数。但我却不能找到一个基于 CLI 的工具。今天我...

作者: Sk ⋅ 05/07 ⋅ 0

怪异的JavaScript系列(二)

译者按: JavaScript有很多坑,经常一不小心就要写bug。 原文: What the f*ck JavaScript? 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学...

Fundebug ⋅ 04/25 ⋅ 0

NodeJS系列~第三个小例子,NodeJs与Redis实现高并发的队列存储

众所周知 redis量个强大的缓存组件,可以部署在win32和linux环境之上,它有五大存储结构,其中有一种为列表list,它可以实现quene和stack的功能,即队列和堆栈的功能。 redis相关文章,可以看...

mcy247 ⋅ 2017/12/06 ⋅ 0

推荐书籍系列(4) -- node.js&docker

最近学习了很多技术包括docker、nodejs、mongodb.这些都是近几年比较火的技术。也代表着技术发展的方向。作为一个程序员,一定要与时俱进,否者会跟不上时代。别人都在用docker,你还在用一些...

刘新全 ⋅ 2016/03/02 ⋅ 0

【Angular】之Angular环境搭建

前言 小编最近在学习angular的内容,万事开头难,完成了开头也便成功了一半。这句话小编在这次的学习实践之旅中,深有体会,下面小编就来讲一讲,angular环境搭建之旅吧! 一、环境搭建 1.下...

m18633778874 ⋅ 05/08 ⋅ 0

学习 Node.js 笔记(一)

学习一种语言并不难, 学习这种语言背后的生态环境可就不那么容易了. 虽然我用 javascript 也不少时间了, 但实际关注的大多是(数学)算法, 较少关注 js 的其它部分, 而现在为了学习别的开源软件...

刘军兴 ⋅ 2015/11/26 ⋅ 0

迷渡:免费的编程中文书籍索引

本文之前发布过,近半年后,本文作者(迷渡,JustJavaC)大幅度进行了更新,因此再次分享给大家。感谢 @justjavac 和众多的分享者!感谢写作这些文档、手册的人们! 语言无关类 操作系统 开源...

山哥 ⋅ 2015/01/22 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 31分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 45分钟前 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 57分钟前 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部