基础知识
内置模块
读取文件
const fs = require('fs')
/**
* @description:fs.readFile()
* @param {type} 路径:参数一
读取文件编码格式 : 参数二
回调函数 : 参数三
* @return:
*/
fs.readFile('./fs-readFile.txt','utf8',function(err,data){
console.log(data);
})
写入文件
const fs = require('fs')
/**
* @description:fs.writeFile()
* @param {type} 路径:参数一
写入数据数据 : 参数二 (编码格式省略)
回调函数 : 参数三
* @return:
*/
//省略格式
fs.writeFile('./fs-writerFile.txt','写入数据',function (err) {
console.log(err);
})
路径
const path = require('path')
const fs = require('fs')
const path1 = path.join(__dirname, '/file1.txt')
const path2 = path.join(__dirname, '/file2.txt')
fs.readFile(path1,'utf-8',function (err,data) {
const arr = data.split(' ')
let newArr = []
for(let i = 0;i<arr.length;i++){
newArr.push(arr[i].replace('=',': '))
};
let newStr = newArr.join('\r\n')
console.log(newStr);
fs.writeFile(path2,newStr,function (err) {
console.log(err);
})
})
path.basename使用
const path = require('path')
const fpath = '/a/b/c/index.html'
const fname = path.basename(fpath)
console.log(fname); //index.html
const ffname = path.basename(fname,'.html')
console.log(ffname); //index
中间件
npm install express
中间件分类
express.static //托管静态资源中间件
const app = express();
app.use('/lff',express.static("public")); //使用
express.json //解析JSON格式请求体数据
app.use(express.json()) //使用
express.urlencoded; //解析urlencoded格式请求体数据
app.use(express.urlencoded({ extended: false })); //使用
express.json 使用
const express = require("express");
const app = express();
app.use(express.json()); //使用
app.get("/", (req, res) => {
console.log(req.body); //可以解析客户端请求的json参数
res.send("发送给客户端消息"); //发送给客户端消息
});
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
express.urlencoded使用
const express = require("express");
const app = express();
app.use(express.urlencoded({ extended: false })); //使用
app.get("/", (req, res) => {
console.log(req.body);
res.send("发送给客户端消息");
});
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
静态资源
const express = require("express");
const app = express();
app.use('/getData',express.static("public"));
//客户端访问 /getData 可以拿到 public 文件夹内容
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
路由模块化
文件1
const express = require("express");
const app = express();
const router = require("./路由模块化")
app.use('/api',router);
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
文件2
const express = require("express");
const router = express.Router();
router.get("/list", (req, res) => {
res.send("list");
});
router.post("/add", (req, res) => {
res.send("add");
});
module.exports = router
错误级别中间件
const express=require('express')
const app=express()
app.get('/',(req,res)=>{
throw new Error('服务器错误')
res.send('get请求')
})
//定义错误级别中间件
//错误级别中间件需要注册在所有路由之后
app.use((err,req,res,next) => {
res.send("Error"+err.message)
})
app.listen(8080,()=>{
console.log('http://127.0.0.1:8080');
})
第三方中间件
下载第三方中间件
npm install body-parser
const express = require("express");
const app = express();
const parser = require("body-parser"); //第三方中间件
app.use(parser.urlencoded({ extended: false })); //使用
app.get("/", (req, res) => {
console.log(req.body);
res.send("发送给客户端消息");
});
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
自定义中间件
const express = require("express");
const app = express();
//解析参数-内置模块
const qs = require("querystring");
app.use((req, res, next) => {
let str = "";
//监听req的 data 事件
req.on("data", (chunk) => {
str += chunk;
});
//监听req的 end 事件
req.on("end", () => {
const body = qs.parse(str);
//挂载供下游使用
req.body = body;
next()
});
});
app.post("/", (req, res) => {
//请求参数发送给客户端
res.send(req.body);
});
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
接口编写
index.js
使用cors解决跨域 npm install cors
const express = require("express");
const routes = require("./apiRouter");
const app = express();
const parser = require("body-parser");
app.use(parser.urlencoded({ extended: false })); //使用
//使用cors解决跨域
const cors = require("cors");
app.use(cors());
app.use("/api", routes);
app.listen(8080, () => {
console.log("http://127.0.0.1:8080");
});
apiRouter.js
const express = require("express");
const routes = express.Router();
//获取菜单全部列表
routes.get('/list', function (req, res) {
const { name } = req.query;
let sqlStr = "select * from menu WHERE 1=1";
const params = [];
//模糊查询
if (name) {
sqlStr += " AND name LIKE ?";
params.push(`%${name}%`);
}
db.query(sqlStr,params, (err, result) => {
if (err) return res.cc(err.message);
res.send({
status: 0,
message: "获取菜单列表成功",
data: result,
count: result.length,
});
});
});
//获取分页列表
routes.get('/page', function (req, res) {
const { name,pageNum, pageSize } = req.query;
// 验证分页参数是否存在且为有效数字
if (!pageNum || isNaN(pageNum) || !pageSize || isNaN(pageSize)) {
return res.cc("分页参数必传且必须为有效数字");
}
// 构建查询条件
let sqlStr = "SELECT * FROM menu WHERE 1=1";
let countStr = "SELECT COUNT(*) AS total FROM menu WHERE 1=1";
const params = [];
// 动态添加条件
if (name) {
sqlStr += " AND name LIKE ?";
countStr += " AND name LIKE ?";
params.push(`%${name}%`);
}
// 添加分页参数
const offset = (Number(pageNum) - 1) * Number(pageSize); // 计算偏移量
params.push(offset, Number(pageSize));
Promise.all([
new Promise((resolve, reject) => {
db.query(sqlStr + " LIMIT ?, ?", params, (err, result) => {
if (err) return reject(err);
resolve(result);
});
}),
new Promise((resolve, reject) => {
db.query(countStr, params.slice(0, -2), (err, result) => {
if (err) return reject(err);
resolve(result[0].total);
});
}),
])
.then(([data, total]) => {
res.send({
status: 0,
message: "获取菜单列表成功",
data,
count: total,
});
})
.catch((err) => {
res.cc(err.message);
});
};
//新增列表
routes.post('/save', function (req, res) {
const sqlStr = "insert into menu set ?";
db.query(sqlStr, req.body, (err, result) => {
if (err) return res.cc(err.message);
if (result.affectedRows !== 1) return res.cc("新增失败");
res.send({
status: 0,
message: "新增成功",
});
});
});
//编辑列表
routes.post('/update', function (req, res) {
const sqlStr = "update list set ? where id=?";
db.query(sqlStr, [req.body, req.params.id], (err, result) => {
if (err) return res.cc(err.message);
if (result.affectedRows !== 1) return res.cc("修改失败");
res.send({
status: 0,
message: "修改成功",
});
});
});
//查询详情
exports.detail = (req, res) => {
const { id } = req.query;
if (!id) return res.cc("id不能为空");
if (isNaN(id)) return res.cc("id必须是数字");
const params = [];
params.push(id);
const sqlStr = "select * from menu where id=?";
db.query(sqlStr, params, (err, result) => {
if (err) return res.cc(err.message);
if (result.length !== 1) return res.cc("查询失败");
res.send({
status: 0,
message: "查询成功",
data: result[0],
});
});
};
//删除列表
routes.delete('/delete/:id', function (req, res) {
const sqlStr = "delete from menu where id=?";
db.query(sqlStr, req.params.id, (err, result) => {
if (err) return res.cc(err.message);
if (result.affectedRows !== 1) return res.cc("删除失败");
res.send({
status: 0,
message: "删除成功",
});
});
});
module.exports = routes;