1、nodejs编写HelloWord,了解什么是nodejs,nodejs有什么特点
2、nodejs的模块怎么用,如何载入别的模块(require),如何给另一模块调用(module, module.exports),自己编写的模块与
node_modules下模块有什么区别,载入顺序是怎样的;自己写一个编写nodejs的一个模块;
3、npm是什么,npm工具如何使用
npm install
npm init
npm install xxx
npm install xxx --save
npm install xxx --save-dev
npm remove xxx
npm remove xxx --save
npm remove xxx --save--dev
npm update xxx
package.json文件中各个项的意思,理解它们是干什么的
2、http模块有哪些方法
2.1 使用http模块,模拟GET请求网上的一个网页、图片
2.2 这个请求中添加headers 如Cookie、Content-Type、Timeout、req获取协议类型,主机地址,端口,状态码,设置字符编码、User-Agent,掌握headers中添加各种参数的方法
2.3 模拟POST请求,提交到自己的后台,以Content-Type为formData、application/x-www-form-urlencoded、application/json 三种方式分别提交,其中formData要求上传文件
2.4 记住http模块中重要的几个方法 res.on('data', function(chunk){}) req.on('error', function(error){}) req.end 等方法
2.5 掌握 querystring, url库的使用方法,对url地址栏进行解析,掌握res.setHeader中 text/explain, text/json
text/html等几种类型的理解
2.6 使用cheerio库解析一个网页中的图片,并下载网页中的图片
3、fs模块
3.1 使用fs模块读、写一个文本文件,掌握readFile、writeFile、 readFileSync、writeFileSync、追加方式的使用方法,理解其中的参数的意思,如文件的mode=0777,记住最好
3.2 Buffer的使用,如何使用Buffer读写一个文件,如何刷新缓冲区;掌握文件流Stream,文件流事件监听器open、data、close等事件的捕获,中断和停止resume, pause;掌握pipe管道 流读写文件;
3.3 fs创建、删除目录,创建多级目录,读取多级目录
3.4 fs修改目录权限,移动文件/文件夹
3.5 实现一个拷贝文件的模块,分别使用readFileSync+writeFileSync与readStream+writeStream方式
4、掌握events模块,理解什么是事件监听,如何创建事件监听器EventEmitter, 添加事件监听器addListener,触发事件监听emit
5、掌握path模块
5.1 获取绝对路径path.isAbsolute
5.2 获取路径中的文件夹部分 path.dirname
5.3 获取路径点之后的部分,相当于获取后缀 path.extname
5.4 将路径中的字符串转换为对象 path.parse 如 xxxx?a=b&c=d 转为{a:b, c:d}
6、OS 模块
6.1 操作系统主机名 os.hostname()
6.2 操作系统名 os.platform()
6.3 操作系统的发行版本 os.release()
6.4 系统内存总量 os.totalmem()
6.6 CPU信息 os.cpus()
6.7 获取网卡列表 os.networkInterfaces()
7、nodejs全局对象
7.1 __filename 脚本文件所在位置的绝对路径
7.2 setTimeout、clearTimeout、setInterval、clearInterval、console.log、console.error、console.dir
7.3 rocess模块
7.3.1 process.stdin process.stdout实现一个命令行窗口,输入中、英文、数字,都可以反馈;
7.3.2 触发process.on('exit', function(){})
7.3.3 process.env 返回当前环境变量,develop, test, production等,若是由pm2管理,则在app.json启动文件中设定
8、request模块
内容同第2点的http模块
9、async模块
series(tasks, [callback]) (多个函数依次执行,之间没有数据交换)
parallel(tasks, [callback]) (多个函数并行执行)
waterfall(tasks, [callback]) (多个函数依次执行,且前一个的输出为后一个的输入)
auto(tasks, [callback]) (多个函数有依赖关系,有的并行执行,有的依次执行)
whilst(test, fn, callback)(用可于异步调用的while)
until(test, fn, callback) (与while相似,但判断条件相反)
queue (可设定worker数量的队列)
iterator(tasks) (将几个函数包装为iterator)
apply(function, arguments..) (给函数预绑定参数)
nextTick(callback) (在nodejs与浏览器两边行为一致)
10、q模块(Promise的使用)
10.1、普通的promise返回两个函数,第一个成功 .then(result),第二个失败时触发调用 .fail(error) 类似try catch finally中的 finally用于回收资源的(关闭数据库,服务).fin ()函数
10.2、两种链式操作,
一种是写在函数内部的回调模式
return getUsername()
.then(function (username) {
return getUser(username)
.then(function (user) {
// if we get here without an error,
// the value returned here
// or the exception thrown here
// resolves the promise returned
// by the first line
})
});
一种是函数外部的,线性模式
return getUsername()
.then(function (username) {
return getUser(username);
})
.then(function (user) {
// if we get here without an error,
// the value returned here
// or the exception thrown here
// resolves the promise returned
// by the first line
});
10.3、Q.all 所有promises都成功,则执行then(result)函数,有一个拒绝reject,则立即退出,
并进入fail(error)函数
10.4、Q.allSettled,则等待所有的promises执行完成后,一起fulfilled(完成态), 或者rejected
(拒绝态)
10.5、Q.any 只要promises数组中的任何一个执行成功,则执行则执行then(result)函数;所有项都失败时,
进入fail(error)函数
10.6、spread 函数允许promise返回多个值
10.7、函数队列,递归条用,给定初始值,链式调用
普通版本
return funcs.reduce(function (soFar, f) {
return soFar.then(f);
}, Q(initialVal));
紧凑版本
return funcs.reduce(Q.when, Q(initialVal));
10.8、进展提醒 Progress Notification
then函数的第三个函数,或者promise.progress(function(progress){})
10.9、执行结束 End
结束链式promises,使用.done函数
10.10、以上1-7假定你已经创建了promise的情况下,如果要新建空白promise,则需要调用Q.fcall
return Q.fcall(function () {
return 10;
});
10.11、使用Deferreds创建promise对象
var deferred = Q.defer();
FS.readFile("foo.txt", "utf-8", function (error, text) {
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(text);
}
});
return deferred.promise;
10.12、使用Q.delay创建promise对象
function delay(ms) {
var deferred = Q.defer();
setTimeout(deferred.resolve, ms);
return deferred.promise;
}
10.13、使用 Q.timeout创建promise对象
function timeout(promise, ms) {
var deferred = Q.defer();
Q.when(promise, deferred.resolve);
delay(ms).then(function () {
deferred.reject(new Error("Timed out"));
});
return deferred.promise;
}
当然可以使用deferred.notify来执行,进展提醒 Progress Notification
function requestOkText(url) {
var request = new XMLHttpRequest();
var deferred = Q.defer();
request.open("GET", url, true);
request.onload = onload;
request.onerror = onerror;
request.onprogress = onprogress;
request.send();
function onload() {
if (request.status === 200) {
deferred.resolve(request.responseText);
} else {
deferred.reject(new Error("Status code was " + request.status ));
}
}
function onerror() {
deferred.reject(new Error("Can't XHR " + JSON.stringify(url)));
}
function onprogress(event) {
deferred.notify(event.loaded / event.total);
}
return deferred.promise;
}
也可以使用Q.promise来执行,进展提醒Promise Notification
function requestOkText(url) {
return Q.Promise(function(resolve, reject, notify) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onload = onload;
request.onerror = onerror;
request.onprogress = onprogress;
request.send();
function onload() {
if (request.status === 200) {
resolve(request.responseText);
} else {
reject(new Error("Status code was " + request.status));
}
}
function onerror() {
reject(new Error("Can't XHR " + JSON.stringify(url)));
}
function onprogress(event) {
notify(event.loaded / event.total);
}
});
}
11、express模块
11.1、掌握使用express各种模块创建一个http服务器;
11.2、request 和 response 对象的方法:
Request 对象 - request 对象表示 HTTP 请求,包含了请求查询字符串,参数,内容,HTTP 头部等属性。常见属性有:
req.app:当callback为外部文件时,用req.app访问express的实例
req.baseUrl:获取路由当前安装的URL路径
req.body / req.cookies:获得「请求主体」/ Cookies
req.fresh / req.stale:判断请求是否还「新鲜」
req.hostname / req.ip:获取主机名和IP地址
req.originalUrl:获取原始请求URL
req.params:获取路由的parameters
req.path:获取请求路径
req.protocol:获取协议类型
req.query:获取URL的查询参数串
req.route:获取当前匹配的路由
req.subdomains:获取子域名
req.accpets():检查请求的Accept头的请求类型
req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages
req.get():获取指定的HTTP请求头
req.is():判断请求头Content-Type的MIME类型
Response 对象 - response 对象表示 HTTP 响应,即在接收到请求时向客户端发送的 HTTP 响应数据。常见属性有:
res.app:同req.app一样
res.append():追加指定HTTP头
res.set()在res.append()后将重置之前设置的头
res.cookie(name,value [,option]):设置Cookie
opition: domain / expires / httpOnly / maxAge / path / secure / signed
res.clearCookie():清除Cookie
res.download():传送指定路径的文件
res.get():返回指定的HTTP头
res.json():传送JSON响应
res.jsonp():传送JSONP响应
res.location():只设置响应的Location HTTP头,不设置状态码或者close response
res.redirect():设置响应的Location HTTP头,并且设置状态码302
res.send():传送HTTP响应
res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
res.set():设置HTTP头,传入object可以一次设置多个头
res.status():设置HTTP状态码
res.type():设置Content-Type的MIME类型
11.3、掌握express中间件写法
11.4、掌握express路由的写法
11.5、express.static 中间件来设置静态文件路径
11.6、express上传文件方法,表单 enctype 属性设置为 multipart/form-data, req.files
11.7、cookieParser来管理Cookie
- node基础 --概念
非阻塞IO: node.js使用了事件轮询 setTimeout是非阻塞的: 对于像http,net等原生模块中IO部分也采用了事件轮询,其本质是: 当node接受到浏览器的http请求时,底层的TC ...
- 【转载】Apache Storm 官方文档 —— 基础概念
[转载自https://yq.aliyun.com/articles/87510?t=t1] Storm 系统中包含以下几个基本概念: 拓扑(Topologies) 流(Streams) 数据源(Sp ...
- (转载)小白的linux设备驱动归纳总结(一):内核的相关基础概念---学习总结
1. 学习总结 小白的博客讲的linux内核驱动这一块的东西比较基础,因此想通过学习他的博客,搭配着看书的方式来学习linux内核和驱动.我会依次更新在学习小白的博客的过程的感悟和体会. 2.1 内核 ...
- zabbix监控的基础概念、工作原理及架构(一)
zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- linux设备驱动归纳总结(二):模块的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...
- linux设备驱动归纳总结(一)内核的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...
- Elasticsearch教程之基础概念
基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 1.接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味 ...
随机推荐
- Python中处理日期时间库的使用方法(转载)
<本文来自公众号“大邓带你玩python”,转载> 用百分之20时间,学会解决百分之80的问题. 常用的库有time.datetime.其中datetime库是对time库的封装,所以使用 ...
- K - KazaQ’s Socks
Bryce1010模板 #include <bits/stdc++.h> using namespace std; #define LL long long int main() { LL ...
- GOTO语句以及GOTO机制的模式实现
goto语句提供了方法内部的任意跳转,它在特殊场景下被应用. 而假设一个对象执行一个方法后,我们期望其余任何对象都可以捕获它,然后自己执行某些操作,那么可以怎么实现呢 class 皇宫 { void ...
- Suricata是什么?
不多说,直接上干货! 见Suricata的官网 https://suricata.readthedocs.io/en/latest/what-is-suricata.html snort.suirca ...
- HBase Region Assign流程详解
Hbase是kv存储,但是逻辑上我们可以把存储在hbase上的kv数据当成表,rowkey可以认为是表的主键.为了便于分布式操作,hbase会把表横向切分成一块一块的数据,而每块就是一个Region. ...
- h5学习-canvas绘制矩形、圆形、文字、动画
绘制矩形<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第四天(非原创)
文章大纲 一.课程介绍二.今日内容介绍三.参考资料下载四.参考文章 一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn的使用.(2)第二天:框架的整合.后台 ...
- SpringMvc如何将Url 映射到 RequestMapping (一)
SpringMvc Url 匹配规则详解 最近开始阅读Spring 源码,虽然用了很久的spring ,但是没有真正的分析过Spring时如何工作的.今天重 MVC 的Url匹配规则开始进行Sprin ...
- 2019最新版Devops工具集
啥是Devops? 简单地来说,就是开发(DEV).测试(QA).运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建.测试.发布更加快捷.频繁和可靠. 当然现实的DevOps ...
- VB6程序中NULL注意事项
VB6中从数据库中取出栏位值进行操作,若栏位值为Null,则必须小心处理,否则极易导致程序出错退出. 通常我们从recordset中取出栏位值采用Fields方法,加上栏位名称,如 rsMoney.F ...