四、用nodejs写新增接口

(1)新增数据库

选择不区分大小写

在新建查询内编译

(2)新建提交代码的表

create TABLE code_record(
id INT not null auto_increment,
name VARCHAR(200) not null,
course VARCHAR(200) not null,
mail VARCHAR(200) not null,
description VARCHAR(200) not null,
create_time TIMESTAMP default CURRENT_TIMESTAMP,
img VARCHAR(400),
PRIMARY KEY(id)
)

刷新一下

有了

忘记了一个字段,需要新加一个代码字段

ALTER TABLE code_record add code VARCHAR(500) not null;

刷新

(3)新建user表

CREATE TABLE user(
id int NOT null auto_increment,
name VARCHAR(200) not null,
account VARCHAR(200) not null,
pwd VARCHAR(200) not null,
sex VARCHAR(200) not null,
age VARCHAR(200) not null,
PRIMARY KEY(id)
)

刷新出现了

插入数据

INSERT into user VALUES(1,"管理员","admin","admin123","女","18");

刷新看一下

(4)node登录接口连新数据库和表实现登录

修改Dao->index.js的数据库名字为刚刚建的数据库名字

/*** 数据库连接*/
const mysql = require('mysql');
const DataBase = mysql.createConnection({host: 'localhost',user: 'root',password: '密码',database: 'db_kp',
})
//连接方法异步
const goconnect = ()=>{DataBase.connect();setTimeout(()=>{console.log('数据库连接成功');},2000)
}
//暴露出数据库去
module.exports={connect:goconnect,db:DataBase}

user登录接口

const express = require('express');
const router = express.Router();
const Dao = require('../Dao/index');
const jwt = require('../Midware/jwt');
router.post('/login', (req, res) => {console.log(jwt,'jwt')const sql = "SELECT * from user_kp where account = ?"Dao.db.query(sql,req.body.username,(err,result)=>{// console.log(result,'用户名密码');if(req.body.password == result[0].pwd){/*** 生成token*/const userInfo = {username:result[0].account,sex:result[0].sex,age:result[0].age,}const token = jwt.setToken(userInfo,'1h')res.send({code:200,data:{msg:'登录成功',data:{token}}})}else{res.send({code:200,data:{msg:'登录失败',data: []}})}})
})
router.post('/userInfo',(req,res)=>{console.log( req.headers.authorization,'authorization');const token = req.headers.authorization.split(' ')[1]const userInfo = jwt.verifyToken(token)if (userInfo){res.send({code:200,data:{msg:'获取用户信息成功',data:userInfo}})}
})
module.exports = router

调用接口

const onSubmit = async value => {const res = await login({username:data.username,password:data.password})console.log(res,"登录日志");if(res.data.msg==='登录成功'){const token = res.data.data.tokenconsole.log(token,"token");localStorage.setItem('token',token)router.push('/home')Toast('登录成功')userInfo()}else{Toast('用户名或密码错误')}};const userInfo = async()=>{const res = await getUserInfo();console.log(res,"用户信息");}

登录替换数据库完成

(5)写新增(提交)代码

    /*** 引入express,使用router,引入数据库,写接口,暴露*/const express = require('express');const router = express.Router();const Dao = require('../Dao/index');router.post('/add',(req,res)=>{console.log(req);const sql = `INSERT INTO code_record(name,course,mail,description,code) VALUES(?,?,?,?,?)`Dao.db.query(sql,[req.body.name,req.body.course,req.body.mail,req.body.description,req.body.code],(err,result)=>{console.log(result);})})module.exports = router

在进入index内引用这个接口

/*** 1.引入一个express框架* 2.在加载所有服务模块前,要先连接数据库* 安装body-parser中间件解析JSON数据*/
const express = require('express');
const app = express();
const DataBase = require('./Dao/index');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
DataBase.connect();//连接数据库
/*** 3.中间件,使用Service的接口 发送网络请求*/
/**配置公共请求响应头 */
app.all('*',(req,res,next)=>{// console.log('请求进来了');res.header("Access-Control-Allow-Origin","*");//允许跨域域名res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');//允许跨域的header类型res.header("Access-Control-Allow-Methods","DELETE,PUT,POST,GET,OPTIONS");//允许跨域的请求方式next();
})
app.use('/api/code',require('./Service/Code'))
app.use('/api/Login',require('./Service/login'))
app.use('/api/User',require('./Service/user'))
app.use('/api/home',require('./Service/home'))/*** 4.规定服务的端口号*/
app.listen(3000,()=>{console.log('server is running at http://localhost:3000');})

(6)新增接口的实现

1.先去api封装的新增这个接口

//提交代码的api
export const CodeAddApi = (data) => {return axios.request({/*** nodejs接口*/url: "/api/Code/add",method: "post",data: data,});
};

2.引用

import { CodeAddApi } from '../../api/api';

3.使用

<script setup>
import Header from '../../components/Header.vue';
import { ref } from 'vue'; 
import { CodeAddApi } from '../../api/api';const name = ref('');const course = ref('');const mail = ref('');const description = ref('');const code = ref('');const onSubmit = async(values) => {console.log('submit', values);try{const res = await CodeAddApi({...values})}catch(error){console.log(error)}}</script>
<template>
<Header title="提交代码"/>
<!-- 表单 -->
<van-form @submit="onSubmit"><van-cell-group inset><van-fieldv-model="name"name="name"label="姓名"placeholder="姓名":rules="[{ required: true, message: '请填写姓名' }]"/><van-fieldv-model="course"name="course"label="课程"placeholder="课程":rules="[{ required: true, message: '请填写课程' }]"/><van-fieldv-model="description"name="description"label="描述"placeholder="描述":rules="[{ required: true, message: '请填写描述' }]"/><van-fieldv-model="mail"name="mail"label="邮箱"placeholder="邮箱":rules="[{ required: true, message: '请填写邮箱' }]"/><van-fieldv-model="code"name="code"label="代码"placeholder="代码":rules="[{ required: true, message: '请填写代码' }]"/><div class="uploader"><!-- 代码图片 --><!-- 上传组件 --><!-- <div class="images"><van-uploader :after-read="afterRead" /></div> --></div></van-cell-group><div style="margin: 16px;"><van-button round block type="primary" native-type="submit">提交</van-button></div></van-form>
</template>
<style scoped>
.uploader{font-size: 12px;padding-left: 10px;display: flex;.images{padding-left: 50px;}
}
</style>

请求一下

成功

写下状态

    /*** 引入express,使用router,引入数据库,写接口,暴露*/const express = require('express');const router = express.Router();const Dao = require('../Dao/index');router.post('/add',(req,res)=>{console.log(req);const sql = `INSERT INTO code_record(name,course,mail,description,code) VALUES(?,?,?,?,?)`Dao.db.query(sql,[req.body.name,req.body.course,req.body.mail,req.body.description,req.body.code],(err,result)=>{console.log(result);if(err) {res.send({code:500,msg:'服务器错误',data:[]}        ) return}res.send({code:200,msg:'提交成功'})})})module.exports = router

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685699.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之前馈神经网络

1.导入常用工具包 #在终端中输入以下命令就可以安装工具包 pip install numpy pip install pandas Pip install matplotlib注&#xff1a; numpy是科学计算基础包 pandas能方便处理结构化数据和函数 matplotlib主要用于绘制图表。 #导包的代码&#xff1a; import numpy as n…

YUV中Y颜色模型的采样

YUV的特点 相对于表示颜色的GUI&#xff0c; YUI将亮度&#xff08;用Y表示&#xff09;与色调&#xff08;用U和V表示&#xff09;分开来表示。又因为人类视网膜上的视网膜杆细胞要多于视网膜锥细 胞&#xff0c;说得通俗一些&#xff0c;视网膜杆细胞的作用就是识别亮度&…

【SRC-CPP-OpenCV】给图片更换背景色

文章目录 Part.I IntroductionPart.II Main_bodyChap.I 源码简析Chap.II 效果展示 Part.III 源码Reference Part.I Introduction 本文将介绍如何用 OpenCV 更换图片的背景色&#xff08;附有完整代码&#xff09;。 Part.II Main_body Chap.I 源码简析 配置部分&#xff1a…

02.文件IO

文件描述符 表述打开的文件的 它是open函数的返回值&#xff0c;一个进程启动之后&#xff0c;会默认打开3个文件标识符 0标准输入&#xff0c;1标准输出&#xff0c;2标准错误 新的打开的文件返回文件描述符表中未使用过的最小的文件描述符 open函数 用来打开或者新建一个文件…

九.吊打面试官系列-Tomcat优化-深入源码剖析Tomcat启动流程

前言 上篇文章《Tomcat优化-Tomcat如何打破双亲委派》我们深入分析了一下JVM的ClassLoader类加载器机制&#xff0c;以及Tomcat通过打破双亲委派来实现自己的加载隔离&#xff0c;本篇文章接着上篇文章分析Tomcat的启动流程&#xff0c;主要是看Tomcat是如何进行初始化的。如果…

burp靶场xss漏洞(初级篇)

靶场地址 http://portswigger.net/web-security/all-labs#cross-site-scripting 第一关&#xff1a;反射型 1.发现搜索框直接注入payload <script>alert(111)</script> ​ 2.出现弹窗即说明攻击成功 ​ 第二关&#xff1a;存储型 1.需要在评论里插入payload …

Keycloak实战+spring boot

标题 前言项目搭建前言 最近项目中使用keycloak,为了更好的上手,我先本地Windows搭建一套demo 项目搭建 我本地jdk版本号为: 通过网上查询一些资料查看,jdk1.8对应的keycloak版本为:15的版本,但是没有找到,我只能下载如下: 通过码云我找到了具体的版本号,开始下…

每周打靶VulnHub靶机-DEATHNOTE_ 1

Deathnote: 1 靶机传送门 don’t waste too much time thinking outside the box . It is a Straight forward box . 不要浪费太多时间跳出框框思考问题。这是一个很直接的盒子 是不是所有线索都在这个盒子里&#xff1f; 1.信息搜集 使用nmap进行域内存活主机扫描发现target …

Maven的使用

1.第一个Maven工程 1.1 创建约定目录结构 ​ Hello ​ src ​ ——main(存放主程序) ​ ————java(存放源代码文件) ​ ————resources(存放配置文件和资源文件) ​ ——test(存放测试程序) ​ ————java ​ ————resources ​ pom.xml 1.2 创建核心文件 pom.xml …

帆软报表实现填报报表

我们拿emp表举例 登记信息表 设计一个报表实现对emp表员工的登记 &#xff08;emp表为ORACLE自带用户scott下的一个表&#xff09; 首先&#xff0c;我们设计好填报界面&#xff0c;新建一个普通报表&#xff0c;将emp表中需要的输入一一回应填写进表中。 如下图所示&#xf…

CAPL如何实现TLS握手认证

CAPL有专门的章节介绍如何实现TLS握手认证的函数: CAPL调用哪些函数实现TLS握手认证,需要了解TLS在整个通信过程的哪个阶段。 首先TCP需要建立连接,这是TLS握手的前提。当TLS握手认证完成后,可以传输数据。 所以TLS握手开始前需要确保TCP建立连接,TCP传输数据前需要确保…

HFSS学习-day4-建模操作

通过昨天的学习&#xff0c;我们已经熟悉了HFSS的工作环境&#xff1b;今天我们来讲解HFSS中创建物体模型的县体步骤和相关操作。物体建模是HFSS仿真设计工作的第一步&#xff0c;HFSS中提供了诸如矩形、圆面、长方体圆柱体和球体等多种基本模型(Primitive)&#xff0c;这些基本…