nodejs学习笔记 (上)

  • 通过学习需要做到的是 了解 前后端是如何进行交互的

  • nodejs也是使用javaScript进行编写的

  • javaScript在不同的运行环境中有不同的作用

    • 在浏览器内核中 javaScript用来实现用户的交互

      • dom操作 bom操作 ajax等等
    • 在浏览器的运行环境中 javaScript不能操作用户的文件 这个不是因为javaScript能力不允许 而是因为浏览器禁止了这类操作, 原因是不安全
  • 而在node终端中运行的javaScript就可以对文件进行操作

环境的配置

Node的安装

  • 安装包安装(不建议) node的更新速度很快, 通常两三个月就会更新一次, 而实际开发中, 经常需要在特定版本的node中运行代码 所以要使用Node的版本管理器来安装Node
  • Node版本管理器 nvm
    • window的nvm 和 苹果系统的nvm不一样 安装方法也不一样

window下常用的命令行操作

  • 切换当前目录(change directory):cd
  • 创建目录(make directory):mkdir
  • 查看当前目录列表(directory):dir
    • 别名:ls(list)
  • 清空当前控制台:cls
    • 别名:clear
  • 删除文件:del
    • 别名:rm

注意:所有别名必须在新版本的 PowerShell (linux系统)中使用

模块化管理 commonjs

前端模块化 : AMD规范 CMD规范 Commonjs
Node采用Commonjs模块规范

具体步骤

  • 定义module

    • 每一个js文件就是一个模块, 有自己的作用域, 其他js文件访问不了该js文件的变量函数
  • 暴露接口
    • CommonJS规定, 每一个模块内部, module变量代表当前模块,它的exprots属性 就是对外的接口. 加载某个模块, 其实就是加载该模块的 module.exports属性, 例如
var test = function() {};
module.exports.test = test; // 这里就把test函数暴露出去了
  • 引用接口

    • 如果在模块中需要引用另外一个模块的函数或变量, 那么就用require方法来加载, 例如
var getTest = require('./被引用模块的路径/被引用模块的文件名.js')
getTest.test(); // 这样就可以使用了

模块的分类

  • 模块可以分成三类
  • 内置模块 node自带的模块, 直接引用
  • 第三方模块 由其他的人打包做好的模块 通过npm下载后 引用
  • 自定义模块 自己编写的模块 暴露接口后 引用

###npm 使用入门

官网:https://www.npmjs.com/

安装:无需安装

查看当前版本:

$ npm -v

更新:

$ npm install npm@latest -g

初始化工程

$ npm init$ npm init --yes 默认配置

安装包

使用npm install会读取package.json文件来安装模块。安装的模块分为两类
dependencies和devDependencies,分别对应生产环境需要的安装包和开发环境需要的安装包。

$ npm install$ npm install <package_name> $ npm install <package_name> --save$ npm install <package_name> --save-dev

更新模块

$ npm update

卸载模块

$ npm uninstall <package_name>$ npm uninstall --save lodash

配置npm源 (推荐使用这个方法)

  • 临时使用, 安装包的时候通过–registry参数即可

    $ npm install express --registry https://registry.npm.taobao.org

  • 全局使用

      $ npm config set registry https://registry.npm.taobao.org// 配置后可通过下面方式来验证是否成功npm config get registry// 或npm info express
    
  • cnpm 使用 (不建议使用这个方法)

       // 安装cnpmnpm install -g cnpm --registry=https://registry.npm.taobao.org// 使用cnpm安装包cnpm install express
    

常用的内置模块

node 常用内置api

(1) URL 网址解析
解析URL相关网址信息
url.parse(urlString[, parseQueryString[, slashesDenoteHost]])
url.format(urlObject)
url.resolve(from, to)
(2) QueryString 参数处理
querystring.escape(str)
querystring.unescape(str)
querystring.parse(str[, sep[, eq[, options]]])
querystring.stringify(obj[, sep[, eq[, options]]])
(3) HTTP 模块概要
http.createServer([options][, requestListener])
http.get(options[, callback])
简易的爬虫
代理跨域处理
(4) 事件 events 模块
(5) 文件fs模块
打印目录树
(6) Stream 流模块
歌词播放
音乐下载
(8) request 方法

一个简单的爬虫(爬图片的)

const fs = require("fs");  // 引入内置fs文档操作模块
const cheerio = require("cheerio"); // 引入cheerio第三方模块 这个模块用于方便操作爬取来的html页面的元素(可以用JQ语法获取)
const https = require("https");  // 引入https内置发送请求模块
const request = require("request");  // 引入request第三方发送http请求模块// 需要爬取的网址
let url = "xxxxxx";
https.get(url,function (res) { // 用get方法请求页面// 安全判断const {statusCode} = res; // 状态码const contentType = res.headers['content-type'];console.log(statusCode);console.log(contentType);let error = null;if (statusCode !== 200) {error = new Error("请求状态错误");} else if (!/^text\/html/.test(contentType)) { // 我们需要爬取的是html页面error = new Error("请求类型错误");}if (error) { // 如果error为真 则说明上方两种情况之一出错console.error(error.message); // 打印出错信息res.resume(); // 重置缓存return false;}// 数据的处理// 设置传输来的html格式 防止乱码res.setEncoding('utf8');  // 设置字符集let rawData = ``;res.on('data', function (chunk) {// 每次传输的操作rawData += chunk;});res.on('end', () => {const $ = cheerio.load(rawData);getImg($);});
}).on('error', (e) => {console.error(`Got error: ${e.message}`);
});// 内容的处理
function getImg($) {fs.mkdir("./img01",function (err) {if(!err) {$("img").each(function (index,item){let writeStream = fs.createWriteStream(`./img01/${index}.jpg`); // 创建一个可写入的文件let src = request($(item).attr("src")); // 获取图片src.pipe(writeStream); // 写入图片})}})}

node中的异步操作

  • fs文件操作模块几乎所有操作都有异步和同步两种形式

    • 异步 readFile() 和 同步 readFileSync()
    • 区别:
      • 同步调用会阻塞代码的执行,而异步不会
      • 异步调用会将任务放到任务队列中, 直到任务执行完毕之后才会回调
      • 捕获异常时, 同步的调用必须使用 try catch的方式, 而异步的调用则要用"错误优先",通过回调函数的第一个参数捕获异常 例如:
console.time('sync');
try {var data = fs.readFileSync(path.join('C:\\Users\\iceStone\\Downloads', 'H.mp4'));// console.log(data);
} catch (error) {throw error;
}
console.timeEnd('sync');console.time('async');
fs.readFile(path.join('C:\\Users\\iceStone\\Downloads', 'H.mp4'), (error, data) => {if (error) throw error;// console.log(data);
});
console.timeEnd('async');

promise 对象的使用

如果很多的异步操作需要安装顺序来的时候, 就需要回调函数的嵌套, 如果过多的函数嵌套会造成回调地狱, 这样不利于后期代码的维护, 可以使用promise对象来解决这个问题

具体使用步骤

function test1() {return new Promise(function (resolve, reject) {//需要的异步操作//处理结束后,调用resolve或者rejectresolve("成功调用resolve"); // 会走then路线reject("失败调用reject"); // 会走catch路线})
}
function test2() {同上
}
function test3() {同上
}
test1()
.then(function (msg){return test2();
})
.then(function (msg) {return test3();
})
.catch(function (err) {// 只需要一个catch来捕获错误
})
// 一般来说有多少个异步操作就有多少个then

nodejs学习笔记(上)相关推荐

  1. NodeJS学习笔记: RESTful —— 为本系列做个小结

    前言 本人不是技术专家,该笔记只是从使用语言进行开发的层面上记录一些体会,不包含也不想尝试从源码或者更深的层次去讨论语言本身的优劣.文章内容是笔者的个人感悟,既不保证正确性,也不保证别人能看懂. 这是 ...

  2. 好程序员web前端分享Nodejs学习笔记之Stream模块

    好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...

  3. Nodejs学习笔记(二)——模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http协议与服务器 Nodejs学习笔记( ...

  4. Nodejs学习笔记(一)——基础之全局对象、包和npm

    [目录] Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http协议与服务器 Nodejs学习笔记(五)--express ...

  5. Nodejs学习笔记(七)——接口API

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  6. Nodejs学习笔记(六)——Mysql模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  7. Nodejs学习笔记(四)——http协议与服务器

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(五)--expr ...

  8. 学海灯塔新增学习笔记上传功能

    又经过一天的努力,学海灯塔学习笔记上传功能实现.欢迎访问我们的学海灯塔 学习笔记这一模块的功能和课程文件类似,由同学们上传自己的学习笔记,用户可以下载,并且可以对笔记进行打分,后期将增加文件讨论功能. ...

  9. NodeJS学习笔记

    今天开始学习NodeJS,在这里做个笔记,记录一下我的学习历程,也方便以后参考. 1.什么是NodeJS Node.js® is a JavaScript runtime built on Chrom ...

最新文章

  1. 2021年5G发展展望
  2. 陈丹琦带着清华特奖学弟发布新成果:打破谷歌BERT提出的训练规律!这个庆祝方式太学神了吧...
  3. nik collection滤镜
  4. 二叉搜索树的第k个结点
  5. TermServDevices错误的解决方案
  6. python与正则表达式(part2)--正则表达式的转义
  7. LeetCode 101对称二叉树-简单
  8. python的三元运算
  9. IT综合学习网站收集
  10. python中交换a和b的值_交换A和B之间的元素以获得和相等
  11. svn如何取消某个文件的版本管理_微服务架构如何统一管理工程配置文件
  12. 为什么有的安卓手机越用越慢,刷机也不行?
  13. [leetcode]1293. 网格中的最短路径
  14. 高效能人士的七个习惯(二)七个习惯概论
  15. c++ 的interface
  16. 你已经长大了,寄几的日志要寄几处理
  17. 影响百度竞价点击量的7大原因
  18. CSipSimple 简单分析
  19. 通过腾讯会议实现录屏操作
  20. 水星无线网dns服务器是什么,水星(mercury)路由器上网方式选哪一个?

热门文章

  1. android修改代码后运行不生效,Android Studio使用Kotlin时,修改代码后运行不生效问题...
  2. omnigraffle 画曲线_OmniGraffle使用的10个小技巧
  3. java数字处理_Java数字处理类(上)
  4. Nodejs 文件 与 路径 相关用法实例解析
  5. Javascript中的对象拷贝(对象复制/克隆)
  6. java内存映射缓存,java – 用于数据库实现的内存映射的MappedByteBuffer或直接ByteBuffer?...
  7. AcWing 1978. 奶牛过马路(前缀和)
  8. AtCoder Beginner Contest 182B
  9. 因果推断笔记——数据科学领域因果推断案例集锦(九)
  10. 从源码角度彻底理解ReentrantLock(重入锁)