首页
关于我的
文章归档
友情链接
更多
随机进入
Search
1
解决包下载慢的问题
1,174 阅读
2
PHP简易本地授权实现
219 阅读
3
RSA生成密钥和公钥
69 阅读
4
mysql分批插入数据
65 阅读
5
常用sql语句
63 阅读
默认分类
前端技术
登录
Search
标签搜索
node.js
express
mysql
PHP
FileSystem
path
npm
jsonwebtoken
session
中间件
axios
RSA
FengXin
累计撰写
14
篇文章
累计收到
0
条评论
首页
栏目
默认分类
前端技术
页面
关于我的
文章归档
友情链接
随机进入
搜索到
14
篇与
的结果
2024-03-20
mysql分批插入数据
// 插入数据的方法 function insetData($Data, $hid, $cateId, $mysqli) { // 创建预处理语句 $stmt = $mysqli->prepare( "INSERT INTO love_learn_class (name, getnoun, noun, price, queryplat, docking, content, addtime, fenlei) VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?)" ); // 循环插入数据 foreach ($Data as $value) { // 绑定参数 $stmt->bind_param('sssssssi', $value['name'], $value['cid'], $value['cid'], $value['realPrice'], $hid, $hid, $value['content'], $cateId); // 执行插入操作 $stmt->execute(); } // 在所有插入操作完成后关闭预处理语句 $stmt->close(); } $classTotal = count($classData); // 数据条数 $singleCount = 100; // 每次插入数据的条数 // 数据小于最大单次插入数,直接插入,并跳出循环 if ($classTotal <= $singleCount) { insetData($classData, $hid, $cateId, $mysqli); } else { // 需要循环的次数 $loopCount = ceil($classTotal / $singleCount); // 当前的数据条数 $currentCount = 0; // 循环插入数据 while ($loopCount > 0) { $istClass = array_slice($classData, $currentCount, $singleCount); insetData($istClass, $hid, $cateId, $mysqli); $currentCount += $singleCount; $loopCount--; } }
2024年03月20日
65 阅读
0 评论
0 点赞
2024-01-28
RSA生成密钥和公钥
生成密钥genrsa -out private_key.pem 2048根据密钥生成公钥rsa -in private_key.pem -pubout -out public_key.pem
2024年01月28日
69 阅读
0 评论
0 点赞
2024-01-28
PHP简易本地授权实现
生成授权信息// 要加密的数据 $data = array( 'site'=> 'www.2xyun.cn', 'user'=> 1436386488, 'version'=> '1.1.0' ); // 将数据转换成json格式 $data = json_encode($data); // 读取RSA私钥 $privateKey = openssl_pkey_get_private(file_get_contents('private_key.pem')); // 使用私钥加密数据 openssl_private_encrypt($data, $encryptedData, $privateKey); // 释放私钥资源 openssl_free_key($privateKey); // 将二进制数据转换成base64编码后输出 echo base64_encode($encryptedData);验证授权信息// 加密后的授权信息 $encryptedData = 'ijfVYtnFxHhp/m9J4SMAWVQuvkH3HCK8Gdx5FA63+fVgzzFttXGcrpdg8YP/g8O+DvHp9RISJVTRfUVMeayO8uJWD6ZBOPtlg0z9PWUP1ZOwuRUwqerbkXHCzhA55xgu/qz0jXyR3KJCQxhHC4KlMueKRq/lrtk1O15LGrrQjhBcA7wukpxlm+oDF/ELJ9fEEgl2HeUNBGcq7gYCIWjBvviU6TJvro7rvxWwrItKyb6ck9jIUh7xzcDkDitfTekFYuW+W6WFkUo7DRKR41mjbkH0aNEIs0zEJd9bauipsy2LXAs5hbg4vBzIF4ZgSPPkIWp1t6/lTCcAeyQk5exVvA=='; // 获取公钥 $publicKey = openssl_pkey_get_public(file_get_contents('public_key.pem')); // 使用公钥解密授权信息 openssl_public_decrypt(base64_decode($encryptedData), $decryptedData, $publicKey); // 释放公钥资源 openssl_free_key($publicKey); // 将授权信息转换成数组 $decryptedData = json_decode($decryptedData, true); // 验证域名 if($decryptedData['site'] !== $_SERVER['HTTP_HOST']){ exit(json_encode(['code' => -1, 'msg' => '程序未授权!'])); }
2024年01月28日
219 阅读
0 评论
0 点赞
2023-08-13
axios的安装与使用
安装 axiosnpm i axios全局配置 axios// 打开 main.js 文件 // 1.导入 axios import axios from 'axios' // 2.配置请求链接 axios.defaults.baseURL = 'https://www.2xyun.cn' // 3.将 axios 挂载到 vue 上 app.config.globalProperties.$http = axios // 完整文件如下 import { createApp } from 'vue' import App from './App.vue' import './index.css' import axios from 'axios' const app = createApp(App) axios.defaults.baseURL = 'https://www.2xyun.cn' app.config.globalProperties.$http = axios app.mount('#app') 使用 axios 发起请求// 发起 post 请求 async postInfo() { const { data: res } = await this.$http.post('/post', { name: 'zs', age: 20 }) } // 发起 get 请求 async getInfo() { const { data: res } = await this.$http.get('/get', { params: { name: 'zs', age: 20 } }) }
2023年08月13日
48 阅读
0 评论
0 点赞
2023-07-24
node中间件的使用
定义一个中间件// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 定义中间件 const mv = function(req, res, next) { console.log('触发了中间件!') next() } // 全局注册中间件 app.use(mv) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })简化形式// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 定义一个全局中间件简化形式 app.use((req, res, next) => { console.log('这是最简单的中间件函数') next() }) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })中间件的作用多个中间件之间,共享同一份 req 和 res。基于这样的特性,我们可以在上游的中间件中,统一为 req 或 res 对象添加自定义的属性或方法,供下游的中间件或路由进行使用// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 定义一个全局中间件简化形式 app.use((req, res, next) => { // 获取请求到达服务器的时间 const time = Date.now() // 为 req 对象,挂载自定义属性,从而把时间共享给后面的所有路由 req.startTime = time next() }) app.get('/', (req, res) => { res.send('这是首页' + req.startTime) }) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })定义多个中间价可以使用 app.use() 连续定义多个全局中间件。客户端请求到达服务器之后,会按照中间件定义的先后顺序依次进行调用// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 定义一个全局中间件简化形式 app.use((req, res, next) => { console.log('第一个中间件') next() }) app.use((req, res, next) => { console.log('第二个中间件') next() }) app.get('/', (req, res) => { res.send('这是首页') }) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })局部生效中间件不使用 app.use() 定义的中间件,叫做局部生效的中间件// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 定义一个中间件 const mw1 = (req, res, next) => { console.log('调用了局部中间件') next() } // mw1 中间件只在当前路由中生效 app.get('/', mw1, (req, res) => { res.send('这是首页') }) app.get('/user', (req, res) => { res.send('这是用户界面') }) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })调用多个局部中间件// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 定义一个中间件 const mw1 = (req, res, next) => { console.log('调用了第一个局部中间件') next() } const mw2 = (req, res, next) => { console.log('调用了第二个局部中间件') next() } // mw1, mw2 中间件只在当前路由中生效 // app.get('/', mw1, mw2, (req, res) => { // res.send('这是首页') // }) // 当调用多个中间件时,可以将他们写成一个数组的形式 app.get('/', [mw1, mw2], (req, res) => { res.send('这是首页') }) app.get('/user', (req, res) => { res.send('这是用户界面') }) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })
2023年07月24日
26 阅读
0 评论
0 点赞
2023-07-24
在express中使用session认证
安装 express-sessionnpm i express-session创建 web 服务器// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 启动服务器 app.listen(80, () => { console.log('http://127.0.0.7') })配置并注册 session 中间件// 配置 session 中间件 const session = require('express-session') // 注册 session 中间件 app.use(session({ secret: 'itheima', resave: false, saveUninitialized: true }))向 session 中存数据// 登录的 API 接口 app.post('/api/login', (req, res) => { // 判断登录信息是否正确 if (req.body.username != 'admin' || req.body.password != '000000') { return res.send({ status: 1, msg: '登陆失败!' }) } // 登录成功,将用户信息保存到 session req.session.user = req.body // 用户的信息 req.session.islogin = true // 用户的登录状态 res.send({ status: 0, msg: '登录成功!' }) })从 session 中取数据// 获取用户名称的接口 app.get('/api/username', (req, res) => { // 从 session 中获取用户的名称,响应给客户端 // 判断用户是否已登录 if (!req.session.islogin) { return res.send({ status: 1, msg: '请先登录!' }) } res.send({ status: 0, msg: '您已登录!', username: req.session.user.username }) })清空 session// 退出登录的接口 app.post('/api/logout', (req, res) => { // 清空 session 信息 req.session.destroy() res.send({ status: 0, msg: '退出登录成功!' }) })
2023年07月24日
30 阅读
0 评论
0 点赞
2023-07-24
在express中使用JWT
安装 JWT 和 jsonwebtokennpm i express-jwt jsonwebtoken导入两个相关包// TODO_01:安装并导入 JWT 相关的两个包,分别是 jsonwebtoken 和 express-jwt const jwt = require('jsonwebtoken') const expressJWT = require('express-jwt')定义 secret 密钥// TODO_02:定义 secret 密钥,建议将密钥命名为 secretKey const secretKey = 'itheima No1 ^_^'生成 JWT 字符串// 登录接口 app.post('/api/login', function (req, res) { // 将 req.body 请求体中的数据,转存为 userinfo 常量 const userinfo = req.body // 登录失败 if (userinfo.username !== 'admin' || userinfo.password !== '000000') { return res.send({ status: 400, message: '登录失败!', }) } // 登录成功 // TODO_03:在登录成功之后,调用 jwt.sign() 方法生成 JWT 字符串。并通过 token 属性发送给客户端 // 参数1:用户的信息对象 // 参数2:加密的秘钥 // 参数3:配置对象,可以配置当前 token 的有效期,s:秒,h:小时 // 记住:千万不要把密码加密到 token 字符中 const tokenStr = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '30s' }) res.send({ status: 200, message: '登录成功!', token: tokenStr, // 要发送给客户端的 token 字符串 }) })将 JWT 字符串还原为 JSON 对象// TODO_04:注册将 JWT 字符串解析还原成 JSON 对象的中间件 // 注意:只要配置成功了 express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到 req.user 属性上,‘/api’ 开头的接口不需要权限 app.use(expressJWT({ secret: secretKey }).unless({ path: [/^\/api\//] }))在有权限的接口中调用 req.user 对象// 这是一个有权限的 API 接口 app.get('/admin/getinfo', function (req, res) { // TODO_05:使用 req.user 获取用户信息,并使用 data 属性将用户信息发送给客户端 console.log(req.user) res.send({ status: 200, message: '获取用户信息成功!', data: req.user, // 要发送给客户端的用户信息 }) })捕获解析 JWT 失败后产生的错误// TODO_06:使用全局错误处理中间件,捕获解析 JWT 失败后产生的错误 app.use((err, req, res, next) => { // 这次错误是由 token 解析失败导致的 if (err.name === 'UnauthorizedError') { return res.send({ status: 401, message: '无效的token', }) } res.send({ status: 500, message: '未知的错误', }) })
2023年07月24日
61 阅读
0 评论
0 点赞
2023-07-24
使用express写接口
1.创建服务器// 导入 express 模块 const express = require('express') // 创建服务器实例 const app = express() // 启动服务器 app.listen(80, () => { console.log('server running at http://127.0.0.1') })2.创建并暴露路由模块const express = require('express') const router = express.Router() // 在这里挂载对应的路由 router.get('/get', (req, res) => { const query = req.query res.send({ status: 0, msg: 'GET 请求成功!', data: query }) }) router.post('/post', (req, res) => { const body = req.body res.send({ status: 0, msg: 'POST 请求成功!', data: body }) }) module.exports = router3.导入并注册路由模块// 导入 express 模块 const express = require('express') // 创建服务器实例 const app = express() // 导入路由模块 const router = require('./apiRouter') // 把路由模块注册到 app 上 app.use('/api', router) // 启动服务器 app.listen(80, () => { console.log('server running at http://127.0.0.1') })4.在路由前配置解析表单数据的中间件// 导入 express 模块 const express = require('express') // 创建服务器实例 const app = express() // 通过 express.json() 这个中间件来解析 JSON 格式的数据 app.use(express.json()) // 配置解析表单数据的中间件 app.use(express.urlencoded({ extended: false })) // 导入路由模块 const router = require('./apiRouter') // 把路由模块注册到 app 上 app.use('/api', router) // 启动服务器 app.listen(80, () => { console.log('server running at http://127.0.0.1') })5.解决跨域问题5.1安装 cors 中间件模块npm i cors5.2在路由之前导入并注册 cors 中间件// 导入 express 模块 const express = require('express') // 创建服务器实例 const app = express() // 通过 express.json() 这个中间件来解析 JSON 格式的数据 app.use(express.json()) // 配置解析表单数据的中间件 app.use(express.urlencoded({ extended: false })) // 在路由之前配置 cors 中间件,从而解决跨域问题 const cors = require('cors') // 全局注册 cors 中间件 app.use(cors()) // 导入路由模块 const router = require('./apiRouter') // 把路由模块注册到 app 上 app.use('/api', router) // 启动服务器 app.listen(80, () => { console.log('server running at http://127.0.0.1') })
2023年07月24日
39 阅读
0 评论
0 点赞
2023-07-24
解决包下载慢的问题
切换 npm 的下包镜像源// 查看当前的下包镜像源 npm config get registry // 将下包镜像源切换为淘宝镜像源 npm config set registry=https://registry.npmmirror.com/ // 查看镜像源是否切换成功 npm config get registrynrm 工具为了方便切换下包资源,我们可以通过 nrm 工具快速且不易出错的切换下包资源// 通过 npm 包管理器,将 nrm 安装为全局可用的工具 npm i nrm -g // 查看所有可用的镜像资源 nrm ls // 将下包资源切换为 taobao 镜像 nrm use taobao
2023年07月24日
1,174 阅读
0 评论
0 点赞
2023-07-24
常用sql语句
查询表中数据-- 通过 * 把 users 中所有的数据查询出来 SELECT * FROM users -- 从 users 表中把 username 和 password 对应的数据查询出来 select username, password from users向表中添加数据-- 向 users 表中插入新数据 INSERT INTO users (username, password) VALUES ('xh', '654321')更新表中数据-- 将 id 为 8 的用户,密码更新成 888888 UPDATE users SET password='888888' WHERE id=8 -- 把 id 为 2 的用户,密码更新为 admin ,状态更新为 1 UPDATE users SET password='admin', status=1 WHERE id=2删除表中数据-- 删除 id 为 9 的用户数据 DELETE FROM users WHERE id=9统计表中数据-- 使用 count(*) 来统计 users 表中,状态为 0 的用户总数量 SELECT count(*) FROM users WHERE status=0使用 AS 关键字给列取别名-- 使用 AS 关键字给列取别名 SELECT count(*) AS total FROM users WHERE status=0
2023年07月24日
63 阅读
0 评论
0 点赞
1
2