fs文件系统模块
导入
const fs = require('fs')
fs.readFile( ‘ 打开路径’ [, ’编码格式‘ ] , 回调函数) 读取指定文件中的内容
fs.writeFile(‘ 存放路径’ ,‘写入内容’ [, ’编码格式‘ ] , 回调函数) 向指定文件中写入内容
回调函数 function(err,dataStr){ }
__dirname表示当前文件所处的目录
path路径模块
导入
const path = require('path')
path.join('任意个路径的片段') 用来将多个路径片段拼接成一个完整的路径字符串
其返回值是一个字符串形式
path.bansename(’文件路径‘[,‘文件扩展名’]) 用来从路径字符串中将文件名解析出来
其返回值是一个字符串形式
path.extname(’文件路径‘) 可以获取路径中的扩展名部分
其返回值是一个字符串形式
const fs = require('fs');
const path = require('path');
//匹配style标签与script标签
const regStyle = /<style>[\s\S]*<\/style>/;
const regScript = /<script>[\s\S]*<\/script>/;
fs.readFile(path.join(__dirname, 'index.html'), 'utf8', function (err, dataStr) {
if (err) console.log("失败:"+err.message)
else {
console.log("成功");
resolveCSS(dataStr);
resolveScript(dataStr);
resolveHtml(dataStr);
}
})
function resolveScript(htmlStr) {
const r = regScript.exec(htmlStr);
const newScript = r[0].replace('<script>', '').replace('</script>', '');
fs.writeFile(path.join(__dirname, 'a.js'), newScript, function (err, dataStr) {
if (err) console.log("失败2:"+err.message)
else console.log("成功2")
})
}
function resolveCSS(htmlStr) {
const r = regStyle.exec(htmlStr);
const newCSS = r[0].replace('<style>', '').replace('</style>', '');
fs.writeFile(path.join(__dirname, 'a.css'), newCSS, function (err, dataStr) {
if (err) console.log("失败1:"+err.message)
else console.log("成功1")
})
}
function resolveHtml(htmlStr) {
const r1 = htmlStr.replace(regStyle, '<link rel="stylesheet" href="a.css"/>');
const r2 = r1.replace(regScript, '<script type="text/javascript" src="a.js"></script>');
fs.writeFile(path.join(__dirname, 'a.html'), r2, function (err, dataStr) {
if (err) console.log("失败1:"+err.message)
else console.log("成功1")
})
}
http模块
把一台普通电脑变成一台服务器,从而对外提供WEB资源服务
// 导入
const http = require('http');
// 创建web服务器
const server = http.createServer();
// 绑定监听事件
server.on('request', function (req, res) {
const url = req.url;
if(url=='/')url='/index.html';
const f_path = path.join(__dirname,url);
fs.readFile(f_path, 'utf8', function (err, dataStr) {
if (err) console.log("网页打开失败:" + err.message)
else {
res.end(dataStr);
console.log("网页打开成功");
}
})
})
// 启动服务器
server.listen(80, function () {
console.log("服务器启动成功");
})
模块化
module (存储了和当前模块有关的信息)
module.exports (可以将模块内部成员共享出去,供其他部分使用)
exports (等同于module.exports,不过永远一module.exports指向为准,不要混用,不然要重新指向)
npm
第三方模块又叫包
装包命令
npm i 包完整名称
npm i (一次性安装所有的包)
npm i 包完整名称 -D (只在开发阶段用得到的包,上线后不用 例如 webpack包)
从淘宝的镜像源下载包,快一点
npm config set registry=https://registry.npm.taobao.org/
nrm工具方便切换镜像源
npm i nrm-g (安装)
nrm ls (查看所有镜像源)
nrm use taobao (切换到淘宝镜像源)
卸载包
npm uninstall 包完整名称
npm init -y (快速创建一个包管理 配置文件 package.json)
在package.json中的dependencies节点里面包含包的信息
// moment时钟包使用
const moment = require("moment");
var data = moment().format("YYYY-MM-DD HH:mm:ss")
console.log(data);
//i5ting_toc md转html包使用
//npm i i5ting_toc -g
//i5ting_toc -f 文件名 -o
//nodemon可以在修改之后重新自动加载项目
Express
和http类似,是专门创建web服务器的第三方包
const express = require('express');
const app = express();
//监听get和post请求
app.get('/',function(req,res){
res.send('get_ok')
})
app.post('/',function(req,res){
res.send('post_ok')
})
app.use(express.static('./'))//把目录当作静态资源展示
app.listen(80,function(){
console.log('创建成功')
})
//回应网页
res.end(dataStr);
//监听get和post请求
res.send('post_ok')
res.send('get_ok')
res.query();//获取传参
res.params();//获得动态参数,:后面的值
express中的路由
请求类型
请求的url地址
处理函数
//创建路由模块
var express = require('express');
var router = express.Router();
router.get('/user/list',function(req,res){ //挂载获取用户列表路由
res.send('获取路由')
})
router.post('/user/add',function(req,res){ //挂载添加用户的路由
res.send('添加路由')
})
module.exports = router //向外导出路由
//导入路由模块
const router = require('./router')
app.use(router)
express中间件
app.get('/',function(req,res,next){
next()
})
//中间件多一个next,与其他函数的区别
//next函数是实现中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由
//多个中间件之间共享一份req,res,基于这样的特性我们可以在上游的中间件统一为req,res对象添加自定义的属性或方法,供下游中间件或路由使用
//全局中间件,局部中间件
express中间件分类
1、应用级别的中间件 (通过app.use()或app.get()或app.post(),绑定到app上的中间件)
2、路由级别的中间件 (绑定到expres.Router()上的中间件)
3、错误级别的中间件 (专门用来捕获项目中发生的异常错误,从而防止项目异常崩溃的问题,必须有四个形参 err,req,res,next)
4、express内置的中间件 (static,json,urlencoded)
5、第三方的中间件 ()
跨域
cors中间件
const cors = require('cors');
app.use(cors());
简单请求
预检请求
jsonp
数据库
传统型数据库(关系型数据库,SQL数据库):MySQL、Oracle、SQL Server
新型数据库(非关系型数据库,NoSQL数据库):Mongodb
传统型数据库 :
数据库
数据表
数据行
字段
PK(主键,唯一标识)
NN(值不允许为空)
UQ(值唯一)
AI(值自动增长)
default/expression (设置默认值)
在项目中操作MySQL
1、安装mysql模块 npm i mysql
2、配置mysql模块
const mysql = require("mysql")
const db = mysql.createPool({
host:'127.0.0.1',
user:'root',
password:'12345',
database:'shujuku',
})
3、查询表里面内容
const sqlStr = 'select * from users'
db.query(sqlStr,function(err,result){
if(err)console.log(err.message)
else console.log(result)
})
//因为数据库版本问题可能会链接不上
//进入C:\Program Files\MySQL\MySQL Server 8.0\bin 终端打开
//mysql -u root -p。然后输入自己数据库的密码,进入数据库
//
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
1
上面’123456’是我的数据库密码,将其改为自己的即可。
//FLUSH PRIVILEGES;
插入数据
const use = {username:'nn',password:'12345'};
const sql = 'insert into users set ?'
db.query(sql,use,function(err,result){
if(err)console.log(err.message)
else console.log('插入成功')
})
更新数据
const new_use = {id:3,username:'new2——',password:'12345'};
const new_sql = 'update users set? where id=?';
db.query(new_sql,[new_use,new_use.id],function(err,result){
if(err)console.log(err.message)
else console.log('更新成功')
})
删除数据
const delete_use = 'delete from users where id=?';
db.query(delete_use,1,function(err,result){
if(err)console.log(err.message)
else console.log('删除成功')
})
web开发模式
基于服务端渲染的传统web开发模式
基于前后端分离的新型web开发模式
身份认证
Session