nodejs基础资料

149 阅读3分钟

基础知识

内置模块

读取文件

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;
​