大神的node书,免费

视频:https://node.university/courses/short-lectures/lectures/3949510

另一本书:全栈JavaScript,学习backbone.js node.js and MongoDB.

1,2章:

  1. Setting up Node.js and Other Essentials [2nd Edition]
  2. Using Express.js 4 to Create Node.js Web Apps [2nd Edition]

第一章

  • Node.js and npm (Node package manager) installation
  • Node.js script launches
  • Node.js syntax and basics
  • Node.js integrated development environments (IDEs) and code editors
  • Awareness of file changes
  • Node.js program debugging

Key Differences Between Node and Browser JavaScript

node没有window, 因此也就没有document对象模型,没有DOM,没有hierarchy of element。

node有global object.(小写字母),可以在任何node环境,文件,app中使用。

你可以在global object上创建property,同时它也有内建的properties。这些properties也是global的,因此可以用在anywhere。

在browser,有内建的modules。

但是node没有core modules,通过文件系统可以使用各种modules。


REPL

进入node控制台,直接在terminal输入node, 这是一个virtual 环境,通常称为read-eval-print-loop

可以直接执行Node.js/JavaScript代码。

⚠️:

require()方法,是node.js的modules功能,在chrome browser 控制台上会报告❌ReferenceError。


Launching Node.js Scripts

语法:

node filename

node -e "直接输入javaScript代码"
//如$ node -e "console.log(new Date())

参数e, 是evaluate script, -e, --eval=...


Node.js Basics and Syntax

Node.js使用chrome v8引擎和ESCAScript,因此大多数语法和前端js类似。

  • Loose typing
  • Buffer—Node.js super data type
  • Object literal notation
  • Functions
  • Arrays
  • Prototypal nature
  • Conventions

Loose Typing

大多数时候支持自动typecasing。primitives包括:String, Number, Boolean, Undefined, Null。

Everything else is an object。包括:Class, Function, Array, RegExp。

在Js,String, Number, Boolean对象有帮助方法:

//例子:
'a' === new String('a') //false, 因为使用new String会返回对象
//所以用toString()
'a' === new String('a').toString() // true
//或者使用==,执行自动typecasing, ===加入了类型判断

Buffer—Node.js Super Data Type

Buffer是Node.js增加的数据类型。

它是一个有效的数据存储data store.

它功能上类似Js的ArrayBuffer。

⚠️:(具体内容,如何创建,使用未看。)

Object Literal Notation对象字面量符号

Node8以后的版本都支持ES6。

比如,箭头函数,使用class, 可以extend另一个对象{...anotherObject}, 动态定义属性名,使用super()关键字,使用函数的短语法。

Functions

在Node.js,函数最重要,它们是对象!可以有属性。

使用function expression定义一个函数,可以anonymous。例子:

//outer 'this'
const f = () => {
//still outer "this"
console.log('Hi')
return true
}

JavaScript把函数当成对象,所以函数也可以作为参数传递给另一个函数,嵌套函数会发生callbacks。

Arrays

let arr4 = new Array(1,"Hi", {a:2}, () => {console.log('boo')})
arr4[3]() // boo

从Array.prototype,global object继承了一些方法。

Prototypal Nature

JavaScript没有classes的概念,对象都是直接继承自其他对象,即prototypal inheritance!

在JS有几种继承模式的类型:

  1. Classical
  2. Pseudoclassical
  3. Functional

ES6,引用了class,但本质未变,只是写法上更方便。使用了new , class, extends关键字。

具体见之前博客:https://www.cnblogs.com/chentianwei/p/10197813.html

传统的是函数继承模式:

//函数user
let user = function(ops) {
return {
firstName: ops.firstName || 'John',
lastName: ops.lastName || 'Doe',
email: ops.email || 'test@test.com',
name: function() { return this.firstName + this.lastName}
}
} //继承函数user,
let agency = function(ops) {
ops = ops || {}
var agency = user(ops)
agency.customers = ops.customers || 0
agency.isAegncy = true
return agency
}

Node.js Globals and Reserved Keywords

  • process
  • global
  • module.exports, exports

Node.js Process Information

每个Node.js script的运行,都是一个系统进程。

可以使用process对象得到,当前进程的相关信息:

process.pid

process.cwd()

node -e "console.log(process.pid)"

global Scope in Node.js

浏览器中的window, document对象都不存在于Node.js.

global是全局对象,可以使用大量方法。如console, setTimeout(), global.process, global.require(), global.module

例子: global.module

Module {
id: '<repl>',
exports: {},
parent: undefined,
filename: null,
loaded: false,
children: [],
paths:
[ '/Users/chentianwei/repl/node_modules',
'/Users/chentianwei/node_modules',
'/Users/node_modules',
'/node_modules',
'/Users/chentianwei/.node_modules',
'/Users/chentianwei/.node_libraries',
'/Users/chentianwei/.nvm/versions/node/v11.0.0/lib/node' ] }

process对象有一系列的有用的信息和方法:

//退出当前进程,如果是在node环境编辑器,直接退出回到终端目录:
process.exit() ⚠️在node环境,直接输入process,得到process对象的所有方法和信息。

Exporting and Importing Modules

module.exports = (app) => {
//
return app
}
const messages = require('./routes/messages.js')

真实案例使用:

const messages = require(path.join(__dirname, 'routes', 'messages.js'))

解释:

_dirname获得绝对路径, 在加上routes/message.js,得到真实的路径。

Node.js Core Modules

核心/基本模块

Node.js不是一个沉重的标准库。核心模块很小,但足够建立任何网络应用。

Networking is at the core of Node.js!

主要但不是全部的core modules, classes, methods, and events include the following:

方便的Node.js Utilities


使用npm安装Node.js的Modules

留意我们需要package.json, node_modules文件夹来在本地安装modules:

$ npm install <name>

例子:

npm install superagent

//然后在program.js,引进这个模块。
const superagent = require('superagent')

使用npm的一大优势,所有依赖都是本地的。

比如:

module A 使用modules B v1.3,

module C 使用modules B v2.0

A,C有它们各自的B的版本的本地拷贝。

这种策略比Ruby和其他一些默认使用全局安装的平台更好。

最好不要把node_modules文件夹放入Git repository,当这个程序是一个模块会被其他app使用的话。

当然,推荐把node_modules放入会部署的app中,这样可以防备由于依赖更新导致的意外损害。

Taming Callbacks in Node.js

callbacks让node.js异步。使用promise, event emitters,或者async library可以防止callback hell

Hello World Server with HTTP Node.js Module

Node.js主要用于建立networking app包括web apps。

因为天然的异步和内建的模块(net, http),Node.js在networks方面快速发展。

下面是一个例子:

创建一个server object, 定义请求handler, 传递数据回到recipient,然后开启server.js。

const http = require('http')
const port = 3000
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('Hello World\n')
}).listen(port, () => {
console.log(`Server running at http://localhost:${port}`)
})

首先,需要用http module。并设置服务port.

然后,创建一个server, 它有一个回调函数,函数包括response的处理代码。

为了设置right header和status code:

  res.writeHead(200, {'Content-Type': 'text/plain'})

再输出一个字符串,使用end symbol.

req和res参数是关于一个HTTP request和response data的信息。另外这2个参数可以使用stream(这是一个模块)

再然后,为了让server接受请求requests,使用listen()方法

最后,再terminal输入:

node server.js

terminals上显示console.log的信息:

Server running at http://localhost:3000
//在浏览器打开连接,可看到'Hello World'字样。这是res.end()实现的。

Debugging Node.js Programs

现代软件开发者,可以使用如Chrome Developer Tools, Firfox Firebug。

因为Node.js和浏览器 JavaScript环境类似,所以我们可以使用大量丰富的Debug工具:

  • Core Node.js Debugge(非用于交互界面)
  • Node Inspector: Port of Google Chrome Developer Tools ✅推荐✅。
  • IDEs: WebStorm, VS Code and other IDEs

Core Node.js Debugger

最好的debugger是 console.log(),

Practical Node.js摘录(2018版)第1,2章。的更多相关文章

  1. Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

    参考:博客 https://www.cnblogs.com/chentianwei/p/10268346.html 参考: mongoose官网(https://mongoosejs.com/docs ...

  2. 自制node.js + npm绿色版

    自制node.js + npm绿色版   Node.js官网有各平台的安装包下载,不想折腾的可以直接下载安装,下面说下windows平台下如何制作绿色版node,以方便迁移. 获取node.exe下载 ...

  3. node.js在2018年能继续火起来吗?我们来看看node.js的待遇情况

    你知道node.js是怎么火起来的吗?你知道node.js现在的平均工资是多少吗?你知道node.js在2018年还能继续火吗?都不知道?那就来看文章吧,多学点node.js,说不定以后的你工资就会高 ...

  4. Practical Node.js (2018版) 第5章:数据库 使用MongoDB和Mongoose,或者node.js的native驱动。

    Persistence with MongoDB and Mongoose https://github.com/azat-co/practicalnode/blob/master/chapter5/ ...

  5. Practical Node.js (2018版) 第10章:Getting Node.js Apps Production Ready

    Getting Node.js Apps Production Ready 部署程序需要知道的方面: Environment variables Express.js in production So ...

  6. Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。

    Real-Time Apps with WebSocket, Socket.IO, and DerbyJS 实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, ...

  7. Practical Node.js (2018版) 第8章:Building Node.js REST API Servers

    Building Node.js REST API Servers with Express.js and Hapi Modern-day web developers use an architec ...

  8. Practical Node.js (2018版) 第3章:测试/Mocha.js, Chai.js, Expect.js

    TDD and BDD for Node.js with Mocha TDD测试驱动开发.自动测试代码. BDD: behavior-driven development行为驱动开发,基于TDD.一种 ...

  9. 《Node.js 高级编程》简介与第二章笔记

    <Node.js 高级编程> 作者简介 Pedro Teixerra 高产,开源项目程序员 Node 社区活跃成员,Node公司的创始人之一. 10岁开始编程,Visual Basic.C ...

随机推荐

  1. Flutter提升开发效率的一些方法和工具

    Flutter的环境搭配完之后,就开始Flutter的开发,下面的一些工具和方法,可以省下一些时间. 自己在用的,暂时想到的,就是这些了,总结一下. 1.JSON解析快速生成实体类 根据接口返回的数据 ...

  2. hdfoo站点开发笔记-2

    httpd的目录的 Options: (里面的单词都是用的复数): Options Indexes FollowSymLinks 为了避免有些目录下没有生成deny.htm而显示列表, 可以直接给 / ...

  3. thinkphp如何省略index.php

    省略index.php叫做 伪静态化; 共有四个步骤: MariaDB[(none)]: 表示, 目前没有选择/使用 任何数据库. 如果use了数据库, 会提示: MariaDB[mysql]... ...

  4. SpringBoot 通过token进行身份验证,存储redis

    代码: public interface TokenManager { /** * 创建token * @param userInfo * @return */ String getToken(Use ...

  5. sonarqube中new issue的标准

    https://docs.sonarqube.org/latest/user-guide/issues/#header-4 Understanding which Issues are "N ...

  6. P3211 [HNOI2011]XOR和路径

    思路 看到异或,容易联想到二进制位之间是相互独立的,所以可以把问题变成每个二进制位为1的概率再乘上(1<<pos)的值 假设现在考虑到pos位,设f[i]为第i个节点期望的异或和第pos位 ...

  7. kylin3

    RDBMS: 关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统, ...

  8. Python中的垃圾回收机制

    Python的垃圾回收机制 引子: 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,而变量名是访问到变量值的唯一方式,所以 ...

  9. 「BZOJ2153」设计铁路 - 斜率DP

    A省有一条东西向的公路经常堵车,为解决这一问题,省政府对此展开了调查. 调查后得知,这条公路两侧有很多村落,每个村落里都住着很多个信仰c教的教徒,每周日都会开着自家的车沿公路到B地去"膜拜& ...

  10. latex建立参考文献的超链接

    在Latex生成的pdf文档中建立超链接(如从正文到参考文献,从目录到相应内容,从页码编号到实际页面等),有利于读者快速定位当前阅读的信息. 如何在生成的pdf文件中包含超链接呢?需要注意一下两点: ...