【Node】入门

109 阅读5分钟

(一)认识nodejs

1.为什么 JavaScript 可以在浏览器中被执行?

不同的浏览器使用不同的 JavaScript 解析引擎

浏览器引擎
Chrome 浏览器V8 (性能最好
Firefox 浏览器OdinMonkey(奥丁猴)
Safri 浏览器JSCore
IE 浏览器Chakra(查克拉)
  • 每个浏览器都内置了 DOMBOM 这样的 API 函数,因此,浏览器中的 JavaScript 才可以调用它们。
  • 浏览器是 JavaScript 的前端运行环境。Node.js 是 JavaScript 的后端运行环境。
    • js放到浏览器中运行可进行前端开发,放到node环境中运行可进行后端开发
  • Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API

2. 终端中的快捷键

按键功能
↑ 键快速定位到上一次执行的命令
tab 键快速补全路径
esc 键快速清空当前已输入的命令
cls 命令清空终端

(二)fs文件系统模块

fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

1.readFile文件读取

  • 语法:readFile(path[,options],callback)
    • 参数1:读取文件的存放路径
    • 参数2:读取文件时候采用的编码格式,一般默认指定 utf8
    • 参数3:回调函数,拿到读取失败和成功的结果 err dataStr
// 1. 导入 fs 模块,来操作文件
const fs = require('fs')
// 2. 调用 fs.readFile() 方法读取文件
fs.readFile('./files/11.txt', 'utf8', function (err, dataStr) {
  // 2.1 打印失败的结果
  // 如果读取成功,则 err 的值为 null
  // 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
  console.log(err)
  console.log('-------')
  // 2.2 打印成功的结果
  console.log(dataStr)
})

2.writeFile文件写入

  • fs.writeFile()方法只能用来创建文件,不能用来创建路径
  • 重复调用fs.writeFile()写入同一个文件,新写入的内容会覆盖之前的旧内容
  • 语法:writeFile(path,data[,options],callback)
    • 参数1:必选,文件的存放路径。
    • 参数2:必选参数,写入的内容。
    • 参数3:可选参数,写入文件格式,默认值是 utf8。
    • 参数4:必选参数,文件写入完成后的回调函数。
// 1. 导入 fs 文件系统模块
const fs = require('fs')
// 2. 调用 fs.writeFile() 方法,写入文件的内容
fs.writeFile(__dirname +'/files/3.txt', 'ok123', function(err) {
  // 2.1 如果文件写入成功,则 err 的值等于 null
  // 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
  // console.log(err)
  if (err) {
    return console.log('文件写入失败!' + err.message)
  }
  console.log('文件写入成功!')
})

3.读写案例

4.动态路径

  • __dirname 表示当前文件所处的目录 image.png

(三)path路径模块

 const path = require('path')

1. 路径拼接path.join([...paths])

  • path.join([...paths]) 方法,用来将多个路径片段拼接成一个完整的路径字符串 image.png

2.路径的文件名path.basename(path[,ext])

  • 用来从路径字符串中,将文件名解析出来
  • path: 必选参数,表示一个路径的字符串
  • ext :可选参数,表示文件扩展名 image.png

3. 获取路径中的文件扩展名path.extname(路径)

4. 案例

image.png

(四)http模块

http概念

image.png

域名和域名服务器

image.png

端口号

image.png

创建服务器

// 1. 导入 http 模块
const http = require('http')
// 2. 创建 web 服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
  console.log('Someone visit our web server.')
})
// 4. 启动服务器
server.listen(8080, function () {  
  console.log('server running at http://127.0.0.1:8080')
})

解决中文乱码的问题 image.png

(五)模块化

image.png

image.png

image.png

image.png

image.png

image.png

image.png

(六)包与npm

包的语义化规范

image.png

包管理配置文件package.json

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

开发自己的npm包

image.png

模块化拆分

image.png

image.png

发布npm包

image.png

image.png

模块的加载机制

image.png

image.png

image.png

image.png

image.png

image.png

(七)express

image.png

image.png

image.png

image.png

image.png

image.png

nodemon

image.png

(八)中间件

image.png

image.png

image.png

image.png

image.png

image.png

image.png

中间件的分类

image.png

image.png

image.png

image.png

image.png

image.png

自定义中间件

image.png

image.png

解决跨域

image.png

image.png

image.png

image.png

image.png

image.png

image.png image.png

image.png

JSONP

image.png

image.png

(九)数据库

image.png

image.png 创建数据库字段

image.png

select语句

image.png

image.png

image.png

image.png

排序

image.png

image.png

count

image.png

image.png

image.png

-- 通过 * 把 users 表中所有的数据查询出来
-- select * from users

-- 从 users 表中把 username 和 password 对应的数据查询出来
-- select username, password from users

-- 向 users 表中,插入新数据,username 的值为 tony stark  password 的值为 098123
-- insert into users (username, password) values ('tony stark', '098123')
-- select * from users

-- 将 id 为 4 的用户密码,更新成 888888
-- update users set password='888888' where id=4
-- select * from users

-- 更新 id 为 2 的用户,把用户密码更新为 admin123  同时,把用户的状态更新为 1
-- update users set password='admin123', status=1 where id=2
-- select * from users

-- 删除 users 表中, id 为 4 的用户
-- delete from users where id=4
-- select * from users

-- 演示 where 子句的使用
-- select * from users where status=1
-- select * from users where id>=2
-- select * from users where username<>'ls'
-- select * from users where username!='ls'

-- 使用 AND 来显示所有状态为0且id小于3的用户
-- select * from users where status=0 and id<3

-- 使用 or 来显示所有状态为1 或 username 为 zs 的用户
-- select * from users where status=1 or username='zs'

-- 对users表中的数据,按照 status 字段进行升序排序
-- select * from users order by status

-- 按照 id 对结果进行降序的排序  desc 表示降序排序   asc 表示升序排序(默认情况下,就是升序排序的)
-- select * from users order by id desc

-- 对 users 表中的数据,先按照 status 进行降序排序,再按照 username 字母的顺序,进行升序的排序
-- select * from users order by status desc, username asc

-- 使用 count(*) 来统计 users 表中,状态为 0 用户的总数量
-- select count(*) from users where status=0

-- 使用 AS 关键字给列起别名
-- select count(*) as total from users where status=0
-- select username as uname, password as upwd from users

在项目中操作SQL

image.png

image.png

实操

image.png

image.png

前后端的身份认证

服务端渲染的概念和优缺点

image.png

image.png

前后端分离

image.png

image.png

image.png

image.png

image.png

session

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png