• https://www.bilibili.com/video/av86253852?p=3

作用:

  1. 运行 js
  2. 文件操作
  3. 数据库操作 可以 但没必要,还是 交给 java把

what

优点:高并发特别好

i/o : input output
正常下 io 操作都是阻塞的 (ajax 同步)

网络请求、数据库处理、文件的读写…

why

  1. 防止甩锅 , 明确数据库交互的错误问题在谁
  2. 能够书写api 斜杠青年:一群不再满足“专一职业”的生活方式
  3. 了解前后端的交互流程
  4. 全栈(全干)

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();

打印当前目录的目录树

  1. 实现的效果
  2. 分析功能点
    • 当前目录结构
    • 分辨是文件还是文件夹

文件操作 - 内置 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

百分比编码的 解码

爬虫案例

  1. 获取目标网站
  2. 2

邮箱验证案例

  1. 只检验格式
    注册案例 156000000000@qq.com pass pass ==》 数据库 一堆垃圾

因此:要验证 邮箱的存在性

【插件】 nodemail - 邮箱 - 服务器 - 使用 - https://blog.csdn.net/LawssssCat/article/details/104217858

npm init -y

npm i nodemailer

https://www.npmjs.com/package/nodemailer

网络基本知识

  • web 服务器
  • api 服务器