Express VUE3 博客开发

1.先安装 基本需要的东西

ps: Express 06 制作留言板项目 创建第一个项目_Sengoku_Xingzi的博客-CSDN博客

根据上面这篇文章完成最基本的搭建 本篇就不重复了

可以用apifox 来测试接口

npm install express

主体

npm install multer

上传的中间件 

npm install sqlite3

链接数据库

npm install uuid

不可能重复的id  几百年才可能重复一个 用作token 

算法的 id 

会根据时间戳 等等 之类的算法 生成id  效率比较好  不会重复

网站雪花ID全家桶(SnowFlake IdGenerator)

使用方法:创一个文件放ta

基本操作:

  app.js  完整代码  

写好了 测试路由text 和 登录路由admin   和 分类增删改查路由 category 

const express = require("express"); //引入
const multer = require("multer"); //引入
const app = express(); //实例化注册
const path = require("path");//固定格式
const port = 3030; // 自定义地址
const { db,genid } = require("./db/DbUtils"); //引入雪花id和数据库

//开放跨域请求,跨域请求放在在中间件的上面
app.use(function (req,res,next) {
  //设置允许跨域的域名,*代表允许任意域名跨域
  res.header("Access-Control-Allow-Origin","*");
  //允许的header类型
  res.header("Access-Control-Allow-Headers","*");
  //跨域允许的请求方式
  res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");
  if (req.method == "OPTIONS") res.sendStatus(200); //让options尝试请求快速结束
  else next();
});

app.use(express.json()); //中间件
// 引用就要使用啦 multer 
const update = multer({
  //上传的文件地址
  dest: "./public/upload/temp",});

app.use(update.any()); //允许所有上传
// 指定静态资源路径
app.use(express.static(path.join(__dirname,"public")));

// 路由中间件 基础
//app.use(定义的接口名字,require(中间件文件路径))
app.use("/test",require("./routers/TestRouter"));
app.use("/admin",require("./routers/AdminRouter"));
app.use("/category",require("./routers/CategoryRouter"));

// 路由中间件 测试 
app.get("/",(req,res) => {
  res.send("hello world");
});
// 启动项  node app.js 后会出现的  里面有变量所以用波浪
app.listen(port,() => {
  console.log(`启动成功: http://localhost:${port}/`);
});

数据库: DbUtils.js

数据库 创建方法 看置顶链接

const sqlite3 = require("sqlite3").verbose(); //引入sqlite3
const { resolve } = require("path");
const path = require("path"); //获取地址,引入数据库
// const { param } = require("../routers/TestRouter")
const Genid = require("../utils/SnowFlake"); //引入雪花id

//  db是暴露出去,给用户作为工具使用的
var db = new sqlite3.Database(path.join(__dirname,"blog.sqlite3"));
//地址转换成字符串
//WorkerId是一个机器码,这样服务器的id就不会重复
const genid = new Genid({ WorkerId: 1 }); //现在只有一个所以id先设置为1
db.async = {}; //定义一个异步的

// 进行sql,和parms还有回调函数的一个封装
db.async.all = (sql,params) => {
  return new Promise((resolve,reject) => {
    db.all(sql,params,(err,rows) => {
      resolve({ err,rows });
      // resolve()异步回调将promise变为fulfilled(已成功)状态
      // reject()异步回调将promise变为rejected(已失败)状态
      // 异步的写法,防止回调地狱
      // Promise的构造函数接收回调函数作为参数
    });
  });
};

// 新增和修改在run里面执行
db.async.run = (sql,reject) => {
    db.run(sql,rows });
    });
  });
};
module.exports = { db,genid }; //把数据库和雪花id先导出去,就不会别的页面总是要引入了

 写接口前 想好最基础有什么数据 要先创建数据库  再去写接口 

 

routers 下的 TestRouter

const express = require("express"); //1.引入express
const router = express.Router(); //2.引入路由
const { db,genid } = require("../db/DbUtils"); //引入雪花id和数据库

//  测试接口
router.get("/test",async (req,res) => {
  // //async允许异步执行
  // db.all("select * from `admin`",[],rows) => {
  //   // promist封装成一个函数,再执行,不然会嵌套很多个数据语句
  //   console.log(rows);
  // });
  // //  then方法, 是接收之前promise异步的方法
  // db.async.all("select * from `admin`",[]).then((res) => {
  //   console.log(res);
  // });
  let out = await db.async.all("select * from `admin`",[]);

  res.send({
    id: genid.NextId(),out,//out:out返回数据等于err,rows
  });
});

module.exports = router; //3.导出路由

routers 下的 AdminRouter

创建了token 返回信息就给一个token uuid

const express = require("express"); //1.引入express
const router = express.Router(); //2.引入路由
const { db,genid } = require("../db/DbUtils"); //引入雪花id和数据库
const { v4: uuidv4 } = require("uuid"); //引入雪花id和数据库
// 登錄接口
router.post("/login",res) => {
  let { account,password } = req.body;
  let { err,rows } = await db.async.all(
    "select * from `admin` where `account` = ? And `password` = ? ",[account,password]
  );
  if (err == null && rows.length > 0) {
    let login_token = uuidv4();
    let update_token_sql = "UPDATE `admin`  SET `token` = ? where `id` = ?";
    await db.async.run(update_token_sql,[(login_token,rows[0].id)]);
    let admin_info = rows[0];
    admin_info.token = login_token;
    admin_info.password = "";

    res.send({
      code: 200,msg: "登录成功",data: admin_info,});
  } else {
    res.send({
      code: 500,msg: "登录失败",});
  }
});

module.exports = router;

 小tip查询用all  插入修改用run  没有东西返回就用run  

routers下的 CategoryRouter.js 文件

写好了  四个基本接口  看下面代码

const express = require("express"); //1.引入express
const router = express.Router(); //2.引入路由
const { db,genid } = require("../db/DbUtils"); //引入雪花id和数据库
const { v4: uuidv4 } = require("uuid"); //引入雪花id和数据库

// 目前这个是没有 谁都可以增删改查 所以需要一个登录状态的校验 这个后面做
//列表接口 分頁和分類就不做了
//添加接口
//修改接口
//刪除接口

//列表接口 分頁和分類就不做了
router.get("/list",res) => {
  const search_sql = "SELECT * FROM `category`";
  //   這個id,name 跟的是 上面這行數據庫查詢語句的 的順序
  let { err,rows } = await db.async.all(search_sql,[]);
  if (err == null) {
    res.send({
      code: 200,msg: "查詢成功",rows,msg: "查詢失败",});
  }
});

// 删除接口 /category/_token/delete?id=xxx
router.delete("/delete",res) => {
  let id = req.query.id;
  const delete_sql = "DELETE FROM `category` WHERE `id` = ?";
  let { err,rows } = await db.async.run(delete_sql,[id]);

  if (err == null) {
    res.send({
      code: 200,msg: "删除成功",msg: "删除失败",});
  }
});

// 修改接口
router.put("/update",res) => {
  let { id,name } = req.body;
  const insert_sql = "INSERT INTO `category` (`id`,`name`) VALUES (?,?)";
  //   這個id,rows } = await db.async.run(insert_sql,[id,name]);
  if (err == null) {
    res.send({
      code: 200,msg: "修改成功",//   rows,msg: "修改失败",});
  }
});

// 添加接口
router.post("/add",res) => {
  let { name } = req.body;
  const insert_sql = "INSERT INTO `category` (`id`,?)";
  let { err,[genid.NextId(),name]);

  if (err == null) {
    res.send({
      code: 200,msg: "添加成功",msg: "添加失败",});
  }
});

module.exports = router;

原文地址:https://blog.csdn.net/Sengoku_Xingzi

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


根据官网 入门 express
java叫接口control什么的app.get.post等等都是请求方式我们可以在游览器输入localhost端口/或者在Apifox里面写。
为了前端丢进去的时候可以直接判断中间件就是经过了这个就会被使用可以做一些自己的数据处理什么的。
Express 文件的上传和下载
运行命令下载app.js 增加中间件。
基本模板来的 后面用后就有什么加什么都行。
此篇完成 增删 刷新文件 的基本操作
最基本的创建 以及 添加了其他的一些插件 登录接口和四个接口
由于每个接口都要放就很麻烦 所以做个中间件
1importre234defstrip_operate(exp):#合并多余的操作符5exp=exp.replace("+-","-")6exp=exp.replace("--","+")7returnexp8910defcal_exp_son(exp_son):#计算两数的乘除11if&
 socket.html<script>//高级api不兼容socket.io//http单向的,socket是双向的,传输都靠tcpletsocket=newWebSocket('ws://localhost:3000')socket.onopen=()=>{//多个页面通信就是先发给服务器,服务器再发给另一个页面socket.send('我
M模式:类,表示数据的应用程序和使用验证逻辑以强制实施针对这些数据的业务规则。V视图:应用程序使用动态生成HTML响应的模板文件。C控制器:处理传入的浏览器请求的类中检索模型数据,然后指定将响应返回到浏览器的视图模板。简单练习: 1、添加ControllerHelloWorldControlle
在Node开发中免不了要使用框架,比如express、koa、koa2拿使用的最多的express来举例子开发中肯定会用到很多类似于下面的这种代码varexpress=require('express');varapp=express();app.listen(3000,function(){console.log('listen3000...');});app.use(middle
node的http创建服务与利用Express框架有何不同原生http模块与使用express框架对比:consthttp=require("http");letserver=http.createServer(function(req,res){//服务器收到浏览器web请求后,打印一句话console.log("recvreqfrombrowser");
编辑nginx文件vi/usr/local/etcginxginx.confnginx配置如下,配置后需重启nginxnginx-sreloadlocation~.*\.json{roothtml;add_header"Access-Control-Allow-Origin""*";}前端index.html<script>fetch('http://localhost:12
constexpress=require('express')constapp=express()//步骤的拆解constresult=express.static('./views')app.use(result)//再次托管一下样式表的资源目录app.use('/css',express.static('./css'))//托管JS文件目录app.use('/js&#
问题描述:最近在做毕设,express里边的中间件(body-parser)失效,req.body获取不到任何值,req.query能获取到值。一开始加body-parser中间件是有用的,直到昨天加了token之后,body-parser失效。试着把token去掉,无济于事,也不是这个问题,也有说版本对不上的,换了中间件的引入方法,还是没用!!! 后
express官网:---->传送门 expressexpress框架有许多功能,比如路由配置,中间件,对于想配置服务器的前端来说,非常便捷自从node发展之后,基于nodejs的开发框架也不断涌现出来,express就是其中之一,最近简单的写了点express框架的简单的处理请求的demo首先是安装express模块npminstall
目录问题: 操作:Win+S按键,输入“事件查看器”问题详情:模块DLLC:\ProgramFiles(x86)\IISExpress\aspnetcore.dll未能加载。返回的数据为错误信息。问题:  操作:Win+S按键,输入“事件查看器” 问题详情:模块DLLC:\ProgramFiles(x86)\IISExpress\aspnetcore.dll
//获取阿里云市场,快递物流记录https://market.aliyun.com/products/56928004/cmapi022273.html?spm=5176.2020520132.101.26.61f97218v18GBF#sku=yuncode1627300000//get_express_log(self::$config['web']['aliyun_AppCode']阿里云市场AppCode,缓存秒数如300秒,'快递公司代