这篇笔记,是自己学习的学习大杂烩,主要用于记录,方便自己查找,其中有些,现在自己看起来都有点好笑,因为错的太低级了,不过这也是成长,后面会梳理好的。
一、node 方面
##1.node 的安装
三种方式: 1.官网下载 安装包 ,进行安装
2.通过docker 来进行 安装(https://www.cnblogs.com/justdoyou/p/10116995.html)
3.通过nvm 来进行镜像管理安装(nvm:nodejs 版本管理工具,npm:nodejs 包管理工具) 安装教程https://www.jianshu.com/p/622ad36ee020
nvm ls-remote 查看可以安装的node 远程所有版本
nvm install v6.11.0 安装指定版本
nvm install --lts 安装最新的稳定版本
nvm install node 安装最新的不稳定版本
nvm ls 查看 所有安装版本
nvm use 切换版本(v6.11.0)
node -v 查看 当前 的node版本
##2.创建nodejs 的项目
@@1. 在 19learn新建 node-demo/node-one文件夹,用终端进入的该文件夹
@@2. 通过npm init 来初始自定义项目信息,或者通过npm init -y 来使用默认的系统初始化信息,还可通过yarn init -y 用创建package.json 初始化文件
@@3.在node-one文件中新建index.js文件,内容为,consolse.log("hello ~ node ")
@@4.通过node 文件名运行 ,查看效果
node index 输出:hello~ node
指定版本运行:nvm run v6.11.0 index.js
查看项目运行的 node 的版本: nvm run node --version
项目中可新建,.mvmrc 文件,来指定具体的版本
##3.node 第三方库包使用
###使用内置模块
@@1. 官方查 文档
@@2.加载要使用库 const os =require('os')
@@3.直接使用 console.log(os.hostname())
###安装网络三方的模块库
使用 npm 安装:npm install request --save
使用yarn 安装: yarn add request
安装过后,会有一个 node_modeules 目录
使用: 通内置模块一样
const request=require('request')
### 本地项目的工具库使用
在node-one文件夹下新建src文件夹,在新建greeting.js工具文件
greeting.js 写入:
const hello =()=>{
console.log("hello 是 自定义工具库方法")
}
module.exports.hello=hello
index.js使用:
const g_utils=require('./src/greeting_utils')
g_utils.hello() //输出 hello 是 自定义工具库方法
###立即查看 运行效果,不使用单独命令行
yarn add nodemon --dev 安装nodemon 三方依赖,可自动保存运行
改变运行方式:
在pagejson.json文件 加入:
"scripts": {
"start": "./node_modules/.bin/nodemon index.js"
},
通过命令: npm run start /npm start 启动nodemon
##4.node events (订阅事件)
通过 对象.on() 进行新增监听事件
通过 对象.emit('事件') ,执行响应的事件
通过 对象.once() 进行新增监听事件,但只会执行最后一次
##5.node 文件操作
const fs=require('fs');
fs.stat('index.js',(error,stats)=>{
//打开 index.js文件
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log(stats);
console.log(`文件:${stats.isFile()}`);
console.log(`目录:${stats.isDirectory()}`);
}
})
//创建一个目录
fs.mkdir('logs',(error)=>{
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log('成功创建目录:logs')
}
})
//创建文件并写入内容,如果有就覆盖
fs.writeFile('logs/logs_text.log',"这是一个写入记录的内容...\n",(error)=>{
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log('成功写入内容到文件')
}
})
//继续添加内容
fs.appendFile('logs/logs_text.log',"这是继续添加写入记录的内容...\n",(error)=>{
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log('继续成功写入内容到文件')
}
})
//读取文件内容
fs.readFile('logs/logs_text.log',(error,data)=>{
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log('文件内容:'+data);
}
})
//列出目录的文件
fs.readdir('logs',(error,files)=>{
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log(files);
}
})
//重名文件
fs.rename('logs/logs_text.log',"logs/logs_text.txt",(error)=>{
if(error){//错误执行
console.log(error);
}else{//成功执行
console.log("重命名成功");
}
});
//删除文件
fs.readdirSync('logs').map((file)=>{ //循环目录文件
fs.unlink(`logs/${file}`,(error)=>{
if(error){
console.log(error);
}else{
console.log(`成功的删除了文件:${file}`);
}
})
});
//删除目录 fs.rmdir('logs',(error)=>{}) 要删除目录,必须是空目录
//## 流的操作
var fileReadStream=fs.createReadStream('data.json');//读流
var fileWriteStream=fs.createWriteStream('data.txt');//写流
//写一个 文件流操作事件 ,每次读一次都会执行该方法
var count=0;
fileReadStream.on('data',(chunk)=>{ //chunk 为 文件中的一大块数据
console.log(`${++count} 接收到 ${chunk.length()}`)
fileWriteStream.write(chunk)//读到的流
})
//只执行一次 最后所有的数据
fileReadStream.once('data',(chunk)=>{ //chunk 为 文件中的一大块数据
console.log(`${chunk.toString()}}`)
})
//读取文件 流 专用结束 事件
fileReadStream.on('end',()=>{
console.log('-- 结束 ---');
})
//读取文件 流 专用错误() 事件
fileReadStream.on('error',(error)=>{
console.log(error);
})
//交接管道流 pipe
fileReadStream.pipe(fileWriteStream);
//链式 pipe的使用 (对读写的流进行压缩了,在写到其他文件)
fileWriteStream.on('pipe',(result)=>{
console.log(result);
})
const zlib=require('zlib');
fileReadStream.pipe(zlib.createGzip())
.pipe(fileWriteStream);
##6. node http网络请求操作
const http=require('http');
var options={
protocol:'http:',
hostname:'api.douban.com',
port:'80',
method:'GET',
path:'/v2/movie/top250'
}
//执行一个网络请求
var responseData='';
var request=http.request(options,(response)=>{
console.log(response);//输出所有的响应
console.log(response.statusCode);//请求状态
console.log(response.headers);//请求头部信息
response.setEncoding('utf8');
response.on('data',(chunk)=>{
console.log(chunk);//请求之后是一个流
responseData +=chunk;
})
})
//请求绑定
request.on('error',(error)=>{
console.log(error);
})
request.on('end',()=>{
JSON.parse(responseData).subjects.map((item)=>{
console.log(item.title);
})
});//执行请求完成
##5.node 测试
在node-dmeo中创建一个node-test文件夹,进入到该文件夹
执行npm init -y 初始化一个默认信息的node项目,选择安装依赖:
全局安装测试库:sudo npm install mocha --global
项目文件安装测试库:npm install mocha --save-dev
然后在node-test文件夹中建立test文件夹和lib文件夹。
要看测试库,可执行 mocha,通过配置npm test 命令来启动测试。
"scripts": {
"test": "./node_modules/mocha/bin/mocha"
}
在test文件中:新建测试文件
//两个参数: 测试名,测试执行函数代码
describe('TestNameClass',function(){
//测试 业务一
describe('方法 1',function(){
//测试 之前 执行
before(function(){
console.log('======测试之前')
})
after(function(){
console.log('======测试之后')
})
beforeEach(function(){
console.log('------每补测试之前')
})
afterEach(function(){
console.log('------每补测试之后')
})
//业务的 第一个模块
context('情境 1',function(){
//模块 中的第一步
it('测试 1',function(){
})
it('测试 2',function(){
})
})
})
})
@@1.测试断言
安装依赖:npm install chai --save-dev
------ 断言 图
##6.npm 包管理 详细看图
##7.express的使用
1.项目创建:
19Learn/node-demo/node-one-express
执行 npm init -y,npm install nodemon babel-cli babel-preset-es2015 babel-preset-stage-0 -y
vscode打开,修改 package.json 中的 scripts{
"start":"./node_modules/.bin/nodemon --exec babel-node index.js"
}
新建文件:.babelrc
{
"presets":["es2015","stage-0"]
}
新建文件:index.js
2.安装Express
查看版本:npm view express versions --json
安装:npm install express@4.17.1 --save
学习路线展望
-------待完善
二、nest 方面
-------待完善
三、拓展:taro
-------待完善