Nodejs第十三课

持续集成平台:travis

知识点

课程内容

首先来瞅瞅这个项目: https://github.com/Ricardo-Li/node-practice-3(项目已失效,自己随便写一个叭)
我们是学习噢,不是抄袭别人的噢,好记性不如烂笔头嘛

Nodejs第十五课

mongdb和mongoose使用简介

安装

mac:

brew update 需要先安装Homebrew.更新
brew install mongdb 安装
sudo mongod -—config /usr/local/etc/mongod.conf 启动

Nodejs第十二课

线上部署Node.js:heroku

目标

这个项目部署上heroku,成为一个线上项目.
参考原作者的App, http://serene-falls-9294.herokuapp.com/

知识点

内容

使用git clone git@github.com:Ricardo-Li/node-practice-2.git命令克隆项目
代码中的Procfile文件:

1
web: node app.js

一个是app.js文件:

1
app.listen(process.env.PORT || 5000);

这两者都是为了部署heroku所做.

Nodejs第十一课

作用域与闭包

讲解 this, var, (function(){})

知识点

  • 理解js中var的作用域
  • 了解闭包的概念
  • 理解this的指向

课程内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var parent = function () {
var name = "parent_name";
var age = 13;

var child = function () {
var name = "child_name";
var childAge = 0.3;

console.log(name, age, childAge);
};

child();

console.log(name, age, childAge);
};
parent();

学过一点别的编程语言肯定都会直觉的认为,内部函数可以访问外部函数的变量,外部不能访问内部函数的变量.因此childAge在parent中会报错.如果声明变量是少了var,就声明就全局变量了.
在Nodejs中,全局变量会被定义在global对象下,在浏览器中,全局变量会被定义在window下.
如果需要定义全局变量,请显示的定义在global或window对象上.

Nodejs第十课

benchmaek怎么写

目标

有一个字符串var number = '100',我们要将它转换成Number类型的100
三个选项: + , parseInt, Number
测试哪种方法更快

知识点

课程内容

首先得有一个benchmark库, https://github.com/bestiejs/benchmark.js
貌似很久没更新的样子,依旧可以使用
按照实例跟着写:

Nodejs第九课

正则表达式

目标

1
var web_development = "python php ruby javascript jsonp perhapsphpisoutdated";

找出其中包含p但不包含ph的所有单词,即
[ 'python', 'javascript', 'jsonp']

知识点

  • 正则表达式的使用
  • js中正则表达式与pcre的区别

课程内容

开始这门课之前,先学习
正则表达式30分钟入门教程
然后继续学习零宽断言
正则表达式之:零宽断言不『消费』

很久以前,处理字符串领域的王者当属perl.
后来出现一个标准叫pcre.
不过前两个都不算标准,后来出现了正则表达式.js里的正则表达式与pcre不兼容.
测试自己写的正则表达式可以访问http://refiddle.com/,所见即所得地调试

讲述js中正则表达式

  • js中,对于四种零宽断言,只支持零宽正预测先行断言和零宽度负预测先行断言
  • js中,正则表达式后面可以跟三个flag.比如/something/igm.
    • i的意义是不区分大小写
    • g的意义是匹配多个
    • m的意义是^和$可以匹配每一行的开头

Nodejs第八课

测试用例:supertest

学习中,原文链接

目标

建立一个lesson8项目,在其中编写代码

app.js:其中有个fibonacci接口

fibonacci函数的定义为int fibonacci(int n),调用函数的url路径是/fib?n=10,然后这个接口会返回55
函数的行为定义如下:

  • n === 0时,返回0;n === 1时,返回1
  • n > 1时,返回fibonacci(n) === fibonacci(n-1) + fibonacci(n-2),如fibonacci(10) === 55
  • n不可大于10,否则抛错,http status 500,因为Node.js的计算性能没那么强。
  • n也不可小于0,否则抛错500,因为没意义。
  • n不为数字时,抛错,500

test/app.test.js:对app的接口进行测试,覆盖以上所有情况

知识点

  • 学习supertest的使用
  • 复习mocha,should的使用

开始

1
$ npm init # 来吧,一阵阵的键盘声(不停的回车)

Nodejs第七课

浏览器端测试: mocha、chai、phantomjs

目标

  • 建立lesson7项目,编写代码
  • main.js类似第六节课中提交的fibonacci函数
  • 此函数的定义为int fibonacci(int n)
    • n === 0,返回0.n === 1时,返回1
    • n > 1,返回fibonacci(n) === fibonacci(n-1) + fibonacci(n-2),如fibonacci(10) === 55
  • verdor文件:前端单元测试环境
  • verdor/test.js编写针对前端脚本的测试用例

知识点

前端脚本单元测试

lesson6的内容都是针对后端环境中node的一些单元测试方案,出于应用健壮性的考量,针对前端js脚本的单元测试也非常重要.而前后端通吃,也是mocha的一大特点.
首先,前端脚本的单元测试主要由两个困难需要解决.

  • 运行环境在浏览器中,可以操作浏览器的DOM对象,且可以随意定义执行时的HTML上下文
  • 测试结果应当可以直接反馈给mocha,判断测试是否可以通过

Nodejs第六课

测试用例: mocha, should, istanbul

第六课, 原文链接Node.js-lesson6

目标

建立lesson6项目,编写代码
main.js: 其中有个fibonacci函数.fibonacci的介绍详见维基百科,中文名 斐波那契
此函数的定义为int fibonacci(int n)

  • 当 n === 0 时,返回0; n === 1 时,返回1
  • n > 1 时,返回fibonacci(n) = fibonacci(n - 1) + fibonacci(n-2),如fibonacci === 55
  • n不能大于10,否则抛错,因为Node.js的计算性能没那么强,到此为止
  • n也不能小于0,否则抛错,因为没意义
  • n不为数字时,抛错

test/main.test.js: 对main函数进行测试,并使行覆盖率和分支覆盖率都达到100%

知识点:

课程内容

$ npm init 初始化项目
编辑 main.js,编写 fibonacci 函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// file main.js
var fibonacci = function(n) {
if(n === 0) {
return 0;
}
if(n === 1) {
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
};
if(require.main === module) {
// 如果是直接执行main.js,则进入此处
// 如果是main.js被其他文件require,则此处不会执行
var n = Number(process.argv[2]);
console.log('fibonacci(' + n + ' ), is', fibonacci(n));
}

执行 $ node main.js 10运行

Nodejs第五课

使用async控制并发

原文链接: https://github.com/alsotang/node-lessons/tree/master/lesson5
博主已学习,并做记录

目标

建立一个lesson5项目,在其中编写代码
代码入口app.js , $ node app.js, 会输出CNode社区首页的所有主题的标题、链接和第一条评论,以json格式
注意: 与lesson4不同. 并发连接数需要控制在5个

输出实例:

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"title": "【公告】发招聘帖的同学留意一下这里",
"href": "http://cnodejs.org/topic/541ed2d05e28155f24676a12",
"comment1": "呵呵呵呵"
},
{
"title": "发布一款 Sublime Text 下的 JavaScript 语法高亮插件",
"href": "http://cnodejs.org/topic/54207e2efffeb6de3d61f68f",
"comment1": "沙发!"
}
]

知识点

当你需要去多个源(一般是小于 10 个)汇总数据的时候,用 eventproxy 方便;当你需要用到队列,需要控制并发数,或者你喜欢函数式编程思维时,使用 async。大部分场景是前者

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×