- https://www.bilibili.com/video/av86253852?p=3
文章目录
- 中文 api - http://nodejs.cn/api/fs.html
作用:
- 运行 js
- 文件操作
数据库操作可以 但没必要,还是 交给 java把
what
- 基于 chrome V8 引擎 的 runtime
- 事件驱动
- 非阻塞的i/o
- npm 是全球最大的开源库生态系统
- 官网:http://nodejs.cn
- npm 插件官网:https://www.npmjs.com/
优点:高并发特别好
i/o : input output
正常下 io 操作都是阻塞的 (ajax 同步)
网络请求、数据库处理、文件的读写…
why
- 防止甩锅 , 明确数据库交互的错误问题在谁
- 能够书写api 斜杠青年:一群不再满足“专一职业”的生活方式
- 了解前后端的交互流程
- 全栈(全干)
api 接口
js 运行环境
- 浏览器
- 基本语法
- bom
- dom
- ajax
- 系统文件数据库(不能,不是语言不能,处于安全性考虑,不能)
- 服务器
- 基本语法
- 能操作数据库
- 能操作本地文件
限值语言能力的不是语言本身,而是语言的运行环境(平台)
nvm (node版本管理 bin)(知道)
配置 npm 源
node 运行环境 REPL (了解)
直接运行代码
//_dirname node全局变量,还有其他,官网找
console.log(_dirname);
//当前文件的执行目录
模块化
- 内置模块 (node 提供 可以直接使用、通过查看官方api 学习)
官方文档:https://nodejs.org/dist/latest-v12.x/docs/api/- 文件操作
- 第三方模块
- 自定义模块
- 创建一个模块(一个js文件一个模块)
- 导出一个模块 (module.exports=name)
- 引入一个模块并且调用
module.js
var name = {
sayHello() {
console.log("hello") ;
}
}
module.exports = name ;
node01.js
let Module = require("./module") ;
console.log(Module)
Module.sayHello();
打印当前目录的目录树
- 实现的效果
- 分析功能点
- 当前目录结构
- 分辨是文件还是文件夹
文件操作 - 内置 api - https://nodejs.org/dist/latest-v12.x/docs/api/fs.html
红色不用 、
fs.readdirSync
const fs = require('fs') ;
let dirs = fs.readdirSync('./') ;
console.log(dirs)
const fs = require('fs') ;
//let dirs = fs.readdirSync('./') ;
let dirs = fs.readdir("./" , (err , files) => {
console.log(err);
console.log(files) ;
}) ;
// 这里有个习惯:
// 错误的回调优先
console.log(dirs)
readdir mkdir rename / try{} catch(err) {}
const fs = require('fs');
fs.mkdir("./test" , (err) => {
if(err) {
console.log('创建失败') ;
console.log(err) ;
}else{
console.log('创建成功')
}
});
fs.rename('./test','./test01' , (err) => {
if(err) {
console.log('更改失败') ;
console.log(err) ;
}else{
console.log('更改成功')
}
}) ;
fs.rmdir('./test01' , (err)=> {
if(err){
console.log('删除失败') ;
console.log(err) ;
}else{
console.log('删除成功')
}
})
因为是异步的,所以啥都可能出现
文件操作
const fs = require('fs');
//创建文件 覆盖写入
fs.writeFile('name.txt','今天天气不错' ,(err) =>{
console.log(err) ;
});
//写入文件
fs.appendFile('name.txt','你好呀 韩梅梅',(err) => {
console.log(err) ;
})
//读取文件
fs.readFile("name.txt", /*'utf8', */ (err , data) => {
console.log(err) ;
console.log(data) ; // 默认 二进制 数据流 buffer
console.log(data.toString('utf8')) // 可以转
})
// 删除文件
fs.unlink('./name.txt' , (err) => {
console.log(err)
})
不同 , 是因为 异步
## fs.state()
fs.stat('./node01.js' , (err, stats) => {
if(stats.isFile()) {
console.log('is file')
}else{
console.log('is dir')
}
})
内置模块 fs ( 上面)
内置模块 url
url 同一资源定位符
const url = require('url') ;
let urlString = 'https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash' ;
let urlObj = url.parse(urlString) ;
console.log(urlObj) ;
const url = require('url') ;
let urlObj = {
protocol: 'https:',
slashes: true,
auth: 'user:pass',
host: 'sub.host.com:8080',
port: '8080',
hostname: 'sub.host.com',
hash: '#hash',
search: '?query=string',
query: 'query=string',
pathname: '/p/a/t/h',
path: '/p/a/t/h?query=string',
href: 'https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash'
};
let urlString = url.format(urlObj) ;
console.log(urlString)
/* url 类比 json 记忆 url.parse 将 url 字符串 转成 对象 url.format 将url 对象 转成 字符串 */
Query
querystring.parse() / decode() / …
http://nodejs.cn/api/querystring.html
const qs = require('querystring') ;
let string = 'name=wangyi&pass=123&sex=0' ;
let obj = qs.parse(string , '&' , '=') ;
//将query字符串变成query对象 。拆分split
console.log(obj)
const qs = require('querystring') ;
let obj = { name: 'wangyi', pass: '123', sex: '0' } ;
let string = qs.stringify(obj , '&' , '=') ;
console.log(string) ;
escape
百分比编码的 编码
unescape
百分比编码的 解码
爬虫案例
- 获取目标网站
- 2
邮箱验证案例
- 只检验格式
注册案例 156000000000@qq.com pass pass ==》 数据库 一堆垃圾
因此:要验证 邮箱的存在性
- nodemailer 可以实现发邮件 - https://nodemailer.com/about/
- npm install jquery --save
- npm 官网
【插件】 nodemail - 邮箱 - 服务器 - 使用 - https://blog.csdn.net/LawssssCat/article/details/104217858
npm init -y
npm i nodemailer
https://www.npmjs.com/package/nodemailer
网络基本知识
- web 服务器
- api 服务器