我将在此写下自己读《Node.js开发指南》一书的笔记,以便于以后的学习。

一、什么是node.js

Node.js 是一个让 JavaScript 运行在浏览器之外的平台

Node.js 不是一种独立的语言,与 PHP、Python、Perl、Ruby 的“既是语言也是平台” 不同。Node.js 也不是一个 JavaScript 框架,不同于 CakePHP、Django、Rails。Node.js 更不 是浏览器端的库,不能与 jQuery、ExtJS 相提并论。Node.js 是一个让 JavaScript 运行在服务 端的开发平台,它让 JavaScript 成为脚本语言世界的一等公民,在服务端堪与 PHP、Python、 Perl、Ruby 平起平坐。

二、Node.js 能做什么

正如 JavaScript 为客户端而生,Node.js 为网络而生。

Node.js 能做的远不止开发一个网 站那么简单,使用 Node.js,你可以轻松地开发:

 具有复杂逻辑的网站;

 基于社交网络的大规模 Web 应用;

 Web Socket 服务器;

 TCP/UDP 套接字应用程序;

 命令行工具;  交互式终端程序;

 带有图形用户界面的本地应用程序;

 单元测试工具;

 客户端 JavaScript 编译器。

三、npm

NPM是随同NodeJS一起安装的包管理工具,类似于Java的包管理。

但是在nodejs中,一般将这样的包称为模块。

需要使用到什么模块,就在控制台(cmd)上输入

  1. npm install <Module Name> 如果在后面添加 -g 代表全局安装 不输入为本地安装<Module Name> 为模块的名称
  1. 安装如果出现如下错误:npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 解决方法为 npm config set proxy null
  1. 安装成功会输出类似如下的提示内容(此为安装express的输出内容)
  1. express@4.13.3 node_modules/express
  2. ├── escape-html@1.0.2
  3. ├── range-parser@1.0.2
  4. ├── merge-descriptors@1.0.0
  5. ├── array-flatten@1.1.1
  6. ├── cookie@0.1.3
  7. ├── utils-merge@1.0.0
  8. ├── parseurl@1.3.0
  9. ├── cookie-signature@1.0.6
  10. ├── methods@1.1.1
  11. ├── fresh@0.3.0
  12. ├── vary@1.0.1
  13. ├── path-to-regexp@0.1.7
  14. ├── content-type@1.0.1
  15. ├── etag@1.7.0
  16. ├── serve-static@1.10.0
  17. ├── content-disposition@0.5.0
  18. ├── depd@1.0.1
  19. ├── qs@4.0.0
  20. ├── finalhandler@0.4.0 (unpipe@1.0.0)
  21. ├── on-finished@2.3.0 (ee-first@1.1.1)
  22. ├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1)
  23. ├── debug@2.2.0 (ms@0.7.1)
  24. ├── type-is@1.6.8 (media-typer@0.3.0, mime-types@2.1.6)
  25. ├── accepts@1.2.12 (negotiator@0.5.3, mime-types@2.1.6)
  26. └── send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1)
  27.  
  28. 卸载模块npm uninstall<Module Name>
  1. 更新模块npm update<Module Name>
  1. 搜索模块 npm search<Module Name>
    创建模块相对复杂,对于新手来说先不做了解。
  1. 四、REPL(交互式解析器)
  1. Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。
    说白了就是一个可以在cmd里面执行JS的解析器,这一点和Java大同小异

Node 自带了交互式解释器,可以执行以下任务:

  • 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。

  • 执行 - 执行输入的数据结构

  • 打印 - 输出结果

  • 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。

Node 的交互式解释器可以很好的调试 Javascript 代码。

如何使用node.ls的REPL终端呢?

在cmd中输入node即可打开 出现>符号表示打开成功,也可以使用nodejs自带的node.exe应用程序。双击直接运行。

五、回调函数

什么是回调函数?

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕(此答案来源知乎:常溪玲 童鞋 在此感谢。)

Node.js 异步编程的直接体现就是回调。异步编程又是什么呢?
JavaScrit的执行环境是单线程的,所以在执行多个函数的时候,要等上一个函数执行完毕之后才能执行下一个。这就是同步执行。
假设我们执行的f1()函数耗时比较久,而我们不想让f2()函数等到F1()执行完毕后执行,就可以使用回到函数的方式来实现异步执行。

function f1(callback){

    setTimeout(function () {

      // f1的任务代码

      callback();

    }, 1000);

  }

function F2(){ }

执行F1函数成了f1(f2)

六、事件循环
 
所谓事件循环是指node.js会把所有的异步操作使用事件机制解决,有个线程在不断地循环检测事件队列。node.js中所有的逻辑都是事件的回调函数,所以node.js始终在事件循环中,程序入口就是事件循环第一个事件的回调函数。事件的回调函数中可能会发出I/O请求或直接发射( emit)事件,执行完毕后返回事件循环。事件循环会检查事件队列中有没有未处理的事件,直到程序结束。
  1.  

nodejs概论的更多相关文章

  1. nodejs概论(实操篇)

    什么是模块? 模块分为原生模块(node.jsAPI提供的原生模块,在启动时已经被加载)和 文件模块(动态加载模块,主要由原生模块module来实现和完成.通过调 用node.js的require方法 ...

  2. nodejs原生模块简介

    一.Express框架 前面的章节已经介绍过了,可以使用npm来安装node.js模块.具体操作请参照以前写的nodejs概论. Express是一个nodejs的web开源框架,用于快速的搭建web ...

  3. NodeJS爬虫系统初探

    NodeJS爬虫系统 NodeJS爬虫系统 0. 概论 爬虫是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上是针对爬虫而做出的优化. robots.txt是一个文本文 ...

  4. ApacheCN NodeJS 译文集 20211204 更新

    Node API 开发入门指南 零.前言 一.Node.js 简介 二.构建 API--第 1 部分 三.构建 API--第 2 部分 React TypeScript Node 全栈开发 零.序言 ...

  5. NodeJs之OS

    OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...

  6. NodeJs之Path

    Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...

  7. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  8. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  9. NodeJs之child_process

    一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...

随机推荐

  1. Python下划线的使用 _ __ __obj__

    Python 用下划线作为变量前缀和后缀指定特殊变量.   _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名   核心风格:避 ...

  2. javaWeb遍历获取session中的值

    //方法一:通过遍历的方法进行遍历 String FileName=""; HttpSession session=request.getSession();//获取session ...

  3. SAR-303 xml validator验证框架

    // 配置文件详解 <mvc:annotation-driven validator="validator" /> <bean id="validato ...

  4. 将Map转换为Java 对象

    public class MapUtil { public static Object convert2Object(Class clazz,Map<String,Object[]> ma ...

  5. moveToThread的最简单用法(依葫芦画瓢即可)(使得线程也更偏向于信号槽的使用方法)

    /*! * \file main.cpp * * Copyright (C) 2010, dbzhang800 * All rights reserved. * */ #include <QtC ...

  6. BZOJ 1007 [HNOI2008]水平可见直线

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4453  Solved: 1636[Submit][Sta ...

  7. Hadoop FileInputFormat实现原理及源码分析

    FileInputFormat(org.apache.hadoop.mapreduce.lib.input.FileInputFormat)是专门针对文件类型的数据源而设计的,也是一个抽象类,它提供两 ...

  8. Bloom Filter(布隆过滤器)

    布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识别率(false positive),即 ...

  9. MFC对话框应用程序添加自定义消息

    1. 定义自定义消息 /** * \brief 消息测试 */ #define E6100_MSG_TEST          ( WM_USER + 1001 ) 2. 声明自定义消息处理函数 /* ...

  10. ZOJ(ZJU) 1002 Fire Net(深搜)

    Suppose that we have a square city with straight streets. A map of a city is a square board with n r ...