node.js的一些个人笔记1(初体验node.1)
1.node.js是什么?
Node.js是一个可以让JavaScript运行在服务器端的平台。它是一个为实时Web应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步I/O、事件驱动式的程序设计模式。
Node.js 有着强大而灵活的包管理器(node package manager, npm),目前已经有上万个第三方模块,其中有网站开发框架,有 MySQL、PostgreSQL、MongoDB数据库接口,有模板语言解析、 CSS 生成工具、邮件、加密、图形、调试支持,甚至还有图形用户界面和操作系统 API工具。
Node.js 可以作为服务器向用户提供服务,与 PHP、 Python、 Ruby on Rails 相比,它跳过了 Apache、 Nginx 等 HTTP服务器,直接面向前端开发。 Node.js 的许多设计理念与经典架构(如 LAMP)有着很大的不同,可提供强大的伸缩能力 。
(node.js 是一个基于 Chrome V8 引擎的 JavaScirpt 运行环境。)
2.node的特点:
优点:Node.js 使用了一个事件驱动、非阻塞式 I/O (input output)的模型,异步编程,使其轻量又高效。
缺点:单进程,单线程,只支持单核cpu,不能充分的利用多核cpu服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。
3.npm nodejs 包管理器 node package manager:
(1)npm包管理:
初始化项目生成package.json
mpm init
安装包
npm install 包名[@版本号][--save / --save-dev][-g]
-g全局安装;
--save安装到生产环境依赖;
两种环境:
生产环境:
如果一个包上线后代码运行还需要依赖,安装时就需要加上 --save;
例如:jquery -S;
开发环境:
bable --save-dev -D;
要求:安装某个包时,一定要区分开发环境或生产环境(-S -D);
简写:
install i;
--save -S;
--save-dev -D;
npm unistall 包名[-g];
npm info 包名 查看包信息
npm run 脚本;
(package.json scripts中定义的脚本);
npm install 安装当前项目所依赖的包(读取 package.json);
(2)yarn:
包管理器
安装
npm i yarn -g
yarn init package.json
yarn add 包名 默认是生产环境依赖 npm i 包名 -S
yarn add 包名 --dev 开发环境依赖
yarn global add 包名 全局安装
yarn remove [package] 移除一个包
安装项目全局依赖
npm install npm i
yarn
yarn add
(3)npm源:
怎么解决源问题?
1,nrm
nrm ls 查看有哪些可用源;
nrm use 源 切换源;
2,cnpm 淘宝源()
例如:npm install -g cnpm --registry=https://registry.npm.taobao.org;
4.nodejs模块化:
模块分类:
node 自己模块
第三方
require("模块名")
自定义
哪怕路径是当前目录 也不能直接写 模块名./
注意:
当我们引入一个模块 直接写模块名时,nodejs先从 系统模块中 查找,如果不是,查找node_modules,如果有则返回node_modules里面模块,如果没有报错
commonjs:
1,一个文件就是一个模块
2,暴露接口
a.js
exports.a=10;
exports.b=20;
module.exports
b.js
const json = require("./a") {a:10,b:20}
a. 系统模块
直接使用
如 fs
const fs = require("模块名")
注意:直接写模块名
b.第三方模块(npm服务器中模块)
const Swiper = require('swiper')
注意:
直接写模块名
c.自定义模块
模块
1,
提供多个接口
exports.a = 10;
exports.b=20;
exports.c = ()=>{
console.log(111)
}
引入使用
const modulea = require("./a")
或者
const { a,b,c } = require("./a")
2, 一个文件只能提供一个接口
module.exports = 值
module.exports = function(){
console.log(111)
}
引入同上(引入的就是 到处的这个值)
注意:require引入一个 模块,如果直接写模块名
1,判断是不是系统模块
2,如果不是,自动去node_modules目录中查看,如果没有报错
+ commonjs中 一个文件 就是一个模块(这个文件中没有导出接口,整个文件就是一个模块),可以直接引入
5.node常用系统模块:
fs模块
文件夹操作 目录操作 读 写 重命名 删 (crud)
目录
读:
fs.readdir
fs.readdirSync
创建:
fs.mkdir
fs.mkdirSync
重命名:
fs.rename()
fs.renameSync
删除:
fs.rmdir
无法删除 目录中有内容的文件夹
fs.rmdirSync
文件:file
curd
读文件 :
fs.readFile
fs.readFileSync
创建:
fs.writeFile()
fs.writeFileSync
更新:
fs.appendFile()
fs.appendFileSync()
删除:
fs.unlink(path,cb);
buffer 二进制的数据流
6.nodejs全局变量:
console.log(__dirname);
//返回的是当前文件所在的 目录的绝对路径
console.log(__filename);
//返回的是当前文件的完成路径 绝对路径
console.log(process.cwd());
// nodejs 运行目录
7.path模块:
path.join("/a","/b","/c")
单纯拼接 结果/a/b/c
path.resolve("/a","/b","./c","d")
解析每一个路径 拼接为一个绝对路径
结果:
C:/b/c/d
8.url模块:
https://www.baidu.com/a/b/c?us=xiaoming&ps=12345#123
协议 主机
域名、端口 path
pathname search
parse
format
9.小案例:
简易爬虫:
1,爬取目标网站内容
http://sc.chinaz.com/tupian/rentixiezhen.html
在通过后台 发送一个get请求
2,解析内容 得到 想要的数据
第三方库 cheerio
demo:
const http = require("http")
const cheerio = require("cheerio")
http.get('http://sc.chinaz.com/tupian/rentixiezhen.html', (res) => {
let arr = [];
let str = "";
res.on('data', (chunk) => {
str+=chunk.toString();
});
res.on('end', () => {
// 分析数据
let $ = cheerio.load(str);
$("img").each(function(i,el){
arr.push( $(el).attr("src2") );

浙公网安备 33010602011771号