node
node概念
- 官方解释: 基于 Chrome V8 的 JS 运行时环境
- 私人解释: 就是一个 “软件”, 只不过这个软件是用来执行 js 文件
环境: 配置在你电脑里面的一个程序, 不存在桌面图标, 依靠命令行运行
nodejs模块化
nodejs模块化共有3类
1、自定义模块
2、内置模块
3、第三方模块
经常使用内置模块和第三方模块
内置模块
fs模块
fs 模块 - file system 文件系统模块
-
这个模块里面封装的方法都是和操作 文件 和 文件夹 相关的内容
-
node 天生自带的一个模块
-
我们直接导入使用
readFile():
=>读取文件
=> 语法: fs.readFile(路径, 读取格式, 回调函数)
-> 路径: 你要读取的文件的路径, 如果路径不存在, 会出现错误
-> 读取格式: 选填, 默认是 buffer(二进制数据), 我们可以选填 'utf8'
-> 回调函数: 读取成功以后会执行的函数
fs.readFile('./test.txt', 'utf8', function (err, data) {
// err 就是读取失败的时候的错误信息
// data 就是读取成功的时候的读取内容
if (err) return console.log(err)
console.log('读取成功')
console.log(data)
})
writeFile()
=> 写入文件
=> 语法: fs.writeFile(路径, 要写入的内容, 回调函数)
-> 路径: 你要写入文件的路径, 如果路径文件不存在, 会创建一个这个文件再写入
-> 写入的内容: 你自己定义
-> 回调函数: 写入成功以后执行的函数, 必填
=> 注意: 完全覆盖式的写入
fs.writeFile('./test.txt', '你好 世界', function () {
console.log('写入完成')
})
appendFile()
=> 异步追加内容
=> 语法: fs.appendFile(路径, 追加的内容, 回调函数)
-> 路径: 写入文件的路径, 没有该路径, 自己创建
-> 追加的内容
-> 回调函数: 必填
readdir()
=> 读取文件夹
=> 语法: fs.readdir(路径, 回调函数)
unlink()
=> 异步删除文件
=> 语法: fs.unlink(路径, 回调函数)
path模块
- node 自带的一个内置模块
- 里面封装的都是一些操作路径的或者和路径相关的方法
- 使用的时候直接导入就可以了
- const path = require(‘path’) 导入path模块
1.join()
+ 拼接相对路径
+ 语法: path.join(路径1, 路径2, 路径3, ...)
+ 返回值: 拼接好的路径结果
+ 注意:
=> 拼接规则是后一个参数是前一个参数的子级
=> 除非写 ../
2. resolve()
+ 拼接绝对路径
+ 语法: path.resolve(路径1, 路径2, 路径3, ...)
+ 返回值: 拼接好的绝对路径
+ 注意:
=> 拼接规则是每一个参数都是相对独立的一个参数
=> 如果你写 /xx, 直接回到根目录(只有在绝对路径中或产生这种情况)
-> xx 当前目录下
-> ./xx 当前目录下
-> ../xx 上一级目录
-> /xx 根目录
3. extname()
+ 获取文件后缀名
+ 语法: path.extname(文件名)
+ 返回值: 该文件的后缀名
4. isAbsolute()
+ 判断路径是不是绝对路径
+ 语法: path.isAbsolute(路径)
+ 返回值: 一个布尔值
+ 路径区分:
=> 绝对路径: 从根目录开始的路径
=> 相对路径: 不是从根目录开始的路径
- parse()
+ 解析路径信息
+ 语法: path.parse(路径)
+ 返回值: 一个对象, 里面包含该路径的所有信息
例子:
const res = path.parse(__filename)
console.log(res)
{
root: 'D:\\',
dir: 'D:\\千锋好程序员三阶段\\0831\\01_代码\\03_内置模块',
base: '02_path模块.js',
ext: '.js',
name: '02_path模块'
}
url模块
- node 自带的一个内置模块
- 里面封装的都是和 url 地址栏相关的方法
- 使用的时候直接导入使用
- const url = require(‘url’) 导入url模块
parse()
+ 解析 url 地址的方法
+ 语法: url.parse(url 地址, 是否解析查询字符串)
-> 地址: 要解析的地址
-> 是否解析查询字符串: 默认是 false, 选填 true
=> 会把地址里面的查询字符串解析成一个对象的形式
+ 返回值: 是一个对象, 里面包含整个 url 地址的所有信息
const res = url.parse('http://www.guoxiang.com:8080/a/b/c/hello.html?a=100&b=200#abc', true)
console.log(res)
Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.guoxiang.com:8080',
port: '8080',
hostname: 'www.guoxiang.com',
hash: '#abc',
search: '?a=100&b=200',
`false不解析查询字符串时:(query:'a=100&b=200')`
query: { a: '100', b: '200' },
pathname: '/a/b/c/hello.html',
path: '/a/b/c/hello.html?a=100&b=200',
href:
'http://www.guoxiang.com:8080/a/b/c/hello.html?a=100&b=200#abc' }
http模块
- node 内置的一个 模块
- 主要是用来创建一个 http 服务的模块
- 需要使用的时候直接导入使用
- const http = require(‘http’) 导入http模块
1. createServer()
=> 创建服务的方法
=> 语法: http.createServer(function () {})
-> 每一个请求进来的时候, 都会触发函数
=> 返回值: 一个服务
2. listen()
=> 注意: 需要使用 服务(createServer 的返回值) 来调用
=> 语法: 服务.listen(端口号, 回调函数)
-> 端口号: 0 ~ 65535, 尽量不使用 1024 以下
`vscode:5500 webstorm:63342 mysql:3306`
-> 域名: 默认是本机 localhost || 127.0.0.1
=> 当 listen 执行以后
-> 你的 命令行, 就会被变成了一个服务器
-> 一个什么都没有的服务器
-> 当你访问 localhost:8080 的时候, createServer 后面的函数就会执行
第三方模块
这里以一个实例来介绍第三方模块的使用
mysql 模块
专门用来连接 mysql 数据库
下载:npm i mysql
npm i -g nodemon 数据库中的服务器内容一经改变并保存后,命令提示行中会自动重启服务器。
使用
导入数据库mysql
const mysql = require('mysql')
连接数据库
连接数据库
返回值就是连接好的模块
const db = mysql.createConnection({
host: 'localhost', //127.0.0.1
port: '3306',
user: 'root',
password: 'root',
database: 'gp19' //操作哪一个库
})
使用db模块执行sql语句
const username = 'guoxiang'
const password = '123456'
1. db的第一种写法
db.query('SELECT * FROM `users` WHERE `username`="' + username + '"', (err, data) => {
if (err) return console.log(err)
console.log(data)
})
2.db的第二种写法
db.query(
'SELECT * FROM `users` WHERE `username`=? AND `password`=?', // ?代表暂定,用后面的数组填充这条语句中的问号(?)
[username, password],
(err, data) => {
if (err) return console.log(err)
console.log(data)
})
关闭数据库连接
db.end()
综合在一起
const db = mysql.createPool({
host: '127.0.0.1',
port: 3306,
user: 'root',
password: 'root',
database: 'gp19'
})
//(null,?,?)的原因是数据库中第一项为id,这里不需要插入,所以插入空(null);所以,后面的db模块中只有2个对应数据
const sql = 'INSERT INTO `users` VALUES(null, ?, ?)'
db.query(sql, ['张思锐', '123456'], (err, data) => {
if (err) return console.log(err)
console.log(data)
})