- node基本命令
- node -v 查看nodeJS版本
- npm -v 查看npm版本
- node -h node帮助信息
- npm install -g cnpm --registry=https://registry.npm.taobao.org 安装淘宝镜像
- 命令行基本操作
- cd .. 进入目录、跳出目录
- 上下键 查看输入历史记录
- tab键 自动补全内容
- ctrl + c 退出操作( 向后执行 )
- cls 清屏
- dir 显示文件
- mkdir 创建文件夹
- rmdir 删除文件夹
- type nul>file.txt 创建空文件
- echo [content]>file.txt 创建带内容文件
- del file.txt 删除文件
- 安装模块
- npm install xxx 局部安装
- npm install xxx –g 全局安装
- npm root –g 全局安装的位置
- nvm\nrm
nvm
- node version manage 对node版本的管理
- nvm ls 查看
- nvm install v10.0.0 创建版本
- nvm use 10.0.0
nrm
- node register manage 对npm下载源的管理
- 安装:cnpm i -g nrm
- nrm ls 查看
- nrm use 切换
- npm操作node模块
- npm install 下载模块
- --save 简写 –S --save-dev 简写 -D
- 卸载模块 npm uninstall 模块名
- 安装指定版本的模块 npm install filename@1.0.0
- 查看 模块 所有版本 view filename versions
- 版本号说明:
- latest | * : 最新版本
- ^1.2.3 : 大版本是固定,中版本和补丁版本不固定
- ~1.2.3 : 大版本和中版本是固定,补丁版本不固定
- 1.2.3 : 全部都是固定的
- 更新模块 npm update 模块名
- 查看项目中的所有过期模块 npm outdated
- 锁定版本的模块在 package-lock.json 文件
- 上传局部代码包:
- npm addUser
- npm publish
- npm unpublish file --force
- 上传全局文件包:
- index.js : #! /usr/bin/env node
- package.json :
"bin": {
"express111": "index.js"
}
- npm link 将全局包安装(实际就是拷贝)到全局中
- npm publish
- npm unpublish file --force
- node基本操作
- node 开启node环境( REPL模式 ),可直接操作
- node hello、node hello.js 后缀名为js的时候可以省略
- cnpm install -g nodemon 安装nodemon, 实时侦测文件的变化
- 模块
CommonJS
CommonJS定义:
CommonJS: 通用模块规范, 主要由NodeJS具体实现; 根据CommonJS规范, 一个单独的文件就是一个模块。每一个模块都是一个单独的作用域, 也就是说, 在该模块内部定义的变量, 无法被其他模块读取, 除非定义为global(浏览器中为window)对象的属性。
Module对象
- module.exports属性
module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
- exports变量
node为每一个模块提供了一个exports变量(可以说是一个对象),指向 module.exports。这相当于每个模块中都有一句这样的命令 var exports = module.exports;
这样,在对外输出时,可以在这个变量上添加方法。例如 exports.add = function (r){return Math.PI * r *r};注意:不能把exports直接指向一个值,这样就相当于切断了 exports 和module.exports 的关系。例如 exports=function(x){console.log(x)};
一个模块的对外接口,就是一个单一的值,不能使用exports输出,必须使用 module.exports输出。module.exports=function(x){console.log(x);}
- module.id 模块的识别符,通常是带有绝对路径的模块文件名。
- module.filename 模块的文件名,带有绝对路径。
- module.loaded 返回一个布尔值,表示模块是否已经完成加载。
- module.parent 返回一个对象,表示调用该模块的模块。
- module.children 返回一个数组,表示该模块要用到的其他模块。
引入模块 (require)
Require 引入模块,这个函数是全局函数
模块的加载机制
commonsJS的加载机制,输入的是被输出值的拷贝。也就是说,一旦输出一个值,模块内部的变化就影响不到这个值了。
第三模块的使用
下载模块 cnpm install xxx.js
内置模块
url模块
- url.parse() 会解析一个 URL 字符串并返回一个 URL 对象。第二个参数布尔值true , 对query属性解析成对象
/*
{
protocol: 'http:', =>协议
slashes: true, =>是否有双斜线
auth: null,
host: 'www.zhufengpeixun.cn', =>域名+端口
port: null, =>端口
hostname: 'www.zhufengpeixun.cn', =>域名
hash: '#video', =>哈希值
search: '?form=qq&lx=stu', =>问号传递的参数[string]
query: 'form=qq&lx=stu', =>问号传递的参数[string] 不包含问号
pathname: '/main/guide/index.html', =>请求资源的路径名称
path: '/main/guide/index.html?form=qq&lx=stu',
href: 'http://www.zhufengpeixun.cn/main/guide/index.html?form=qq&lx=stu#video'
}
*/
- url.format() 返回一个从 urlObject 格式化后的 URL 字符串。 方法是parse()方法的相反操作。
querystring模块
- parse():对query的串联字符串进行对象的解析。
- stringify():parse()的相反操作。
Path模块
- join() 连接路径
- path.parse() 方法可以返回路径各部分的信息。
- path.relative() 接受 2 个路径作为参数。 基于当前工作目录,返回从第一个路径到第二个路径的相对路径。
- path.resolve() 可以使用 path.resolve() 获得相对路径的绝对路径计算。
fs模块
- readFile() 异步读取文件。 readFile(filename,'utf8',function(err,buffer){}) 异步读取文件 readFile(filename,function(err,buffer){ buffer.toString() })
- readFileSync() 同步读取文件。 var v = fs.readFileSync(filename,'utf8');
- writeFile() 异步写入文件 fs.writeFile(filename,'new Text',(err)=>{});
- writeFileSync() 同步写入文件 fs.writeFileSync(filename,'new Text’);
- appendFile() 异步地追加数据到文件,如果文件尚不存在则创建文件。
- appendFileSync() 异步地追加数据到文件,如果文件尚不存在则创建文件。
- unlink() 异步地删除文件或符号链接。
- rename() 重命名 fs.rename(oldName , newName);
- mkdir() : 创建文件夹。
- rmdir():删除文件夹
- readdir() : 读取文件夹。
- stat() : 读取文件信息。
Process模块
- process对象是一个全局变量,提供了有关当前 Node.js 进程的信息并对其进行控制。 作为全局变量,它始终可供 Node.js 应用程序使用,无需使用 require()。 它也可以使用 require() 显式地访问。
- process.argv 属性会返回一个数组,其中包含当 Node.js 进程被启动时传入的命令行参数。
- exit()、exit事件 process.on(‘exit’,()=?{})
- process.env 属性会返回包含用户环境的对象。 cross-env NODE_ENV=production
- stdout、stdin 实例:简单的加法计算
http模块
- http、https模块为网络通信模块
- 分别对应的端口:80、443
- https协议是比http协议更加安全的协议,对传输的数据可以进行加密处理。
- get()/post():进行网络GET请求
- http.get(url,(req)=>{});
- 实例:小爬虫
- http.get(url,(req,res)=>{req.on(‘data’,(data)=>{context+=data.toString()})
- req.on(‘end’,()=>{console.log(data)})
- request():
- var options = {
hostname : ‘localhost’,
path : ‘/reg/reg.php’,
method : ‘POST’,
headers : { }
}; // url对象形式
-
- var data = {};
- var server = http.request(options,(req)=>{ });
- server.write(data);
- server.end();
- axios库:前后端都能用的请求库。
- createServer():创建一个服务器环境
- const server = http.createServer((req,res)=>{});
- server.listen(port,hostname,()=>{});
- 简单的路由
- 路由:根据不同的url来展现不同的网页内容。
- req.url -> url.parse()进行分解 -> pathname找到路径进行判断
- 通过fs.readFile()方法引入不同的静态文件
- 获取get和post数据
- req.method可以返回get或post值
get方式是通过:querystrings.parse(url.parse( req.url ).query)
- post方式是通过:
var str = '';
req.on('data',function(chunk){ str += chunk; });
req.on('end',function(){ console.log(str); });
- ajax提交与返回
- 只接受的string和buffer两种类型的返回
res.end(JSON.stringify({
code : 0,
message : '更新成功'
}));
反爬虫 req.headers.referer;