首页
关于我的
文章归档
友情链接
更多
随机进入
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
条评论
首页
栏目
默认分类
前端技术
页面
关于我的
文章归档
友情链接
随机进入
搜索到
8
篇与
的结果
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
node环境操作数据库
安装 mysql 模块npm i mysql1.导入 mysql 模块// 1.导入 mysql 模块 const mysql = require('mysql')2.建立 mysql 数据库的连接关系// 2.建立 mysql 数据库的连接关系 const db = mysql.createPool({ host: '127.0.0.1', // 数据库地址 port: 3306, // 数据库端口号 user: 'root', // 数据库用户名 password: '123456', // 数据库密码 database: 'my_db_01' // 数据库名称 })3.测试 mysql 模块能否正常工作db.query('select 1', (err, results) => { // mysql 模块工作期间报错了 if(err) return console.log(err.message) // 能够正常执行 MySQL 语句 console.log(results) })查询表中数据// 查询 users 表中的所有数据 const sqlStr = 'select * from users' db.query(sqlStr, (err, results) => { // 查询数据失败 if(err) return console.log(err.message) // 查询数据成功 console.log(results) })向表中添加数据// 向 users 表中,新增一条数据,其中 username 值为 Spider-Man ,password 值为 pcc123 const user = { username: 'Spider-Woman', password: 'pcc123456' } // 定义待执行 SQL 语句 const sqlStr = 'insert into users (username, password) values (?, ?)' // 执行 SQL 语句 db.query(sqlStr, [user.username, user.password], (err, results) => { // 执行 sql 语句失败了 if(err) return console.log(err.message) // 执行成功 if(results.affectedRows === 1) { console.log('添加成功!') } })添加数据的便捷方式const user = { username: 'Spider-Woman2', password: 'pcc123456' } // 定义待执行的 SQL 语句 const sqlStr = 'insert into users set ?' // 执行 sql 语句 db.query(sqlStr, user, (err, results) => { // 执行失败 if(err) return console.log(err.message) // 执行成功 if(results.affectedRows === 1) { console.log('添加成功!') } })更新表中数据// 更新用户信息 const user = { id: 8, username: 'aaa', password: '000' } // 定义 sql 语句 const sqlStr = 'update users set username=?, password=? where id=?' // 执行 sql 语句 db.query(sqlStr, [ user.username, user.password, user.id ], (err, results) => { // 执行 sql 语句失败 if(err) return console.log(err.message) // 执行成功 if(results.affectedRows === 1) { console.log('更改成功!') } })更新表中数据的便捷方式const user = { id: 8, username: 'aaa1', password: '0001' } // 定义 SQL 语句 const sqlStr = 'update users set ? where id=?' // 执行 SQL 语句 db.query(sqlStr, [user, user.id], (err, results) => { // 执行失败 if(err) return console.log(err.message) // 执行成功 if(results.affectedRows === 1) { console.log('更新成功!') } })删除数据// 定义 SQL 语句 const sqlStr = 'delete from users where id=?' // 执行 SQL 语句 db.query(sqlStr, 8, (err, results) => { if(err) return console.log(err.message) if(results.affectedRows === 1) { console.log('删除数据成功!') } })标记删除(避免真实的删除数据)// 标记删除(避免真实的删除数据) const sqlStr ='update users set status=? where id=?' // 执行 SQL 语句 db.query(sqlStr, [1, 11], (err, results) => { // 执行失败 if(err) return console.log(err.message) // 执行成功 if(results.affectedRows === 1) { console.log('删除成功!') } })
2023年07月24日
46 阅读
0 评论
1 点赞
2023-07-24
FileSystem模块
使用readFile方法读取文件内容// 1.导入 fs 模块 const fs = require('fs') // 2.调用 fs.readFile() 方法读取文件 // 参数1:文件路径 // 参数2:读取文件的编码格式,默认 utf8 // 参数3:回调函数,拿到失败和成功的结果 err, dataStr fs.readFile('./file/1.txt', 'utf8', function(err, dataStr) { // 打印失败的结果 // 如果读取成功,则 err 的值为 null // 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined console.log(err) // 打印成功的结果 console.log(dataStr) }) 判断读取文件是否成功// 1.导入 fs 模块 const fs = require('fs') // 2.调用 fs.readFile() 方法读取文件 // 参数1:文件路径 // 参数2:读取文件的编码格式,默认 utf8 // 参数3:回调函数,拿到失败和成功的结果 err, dataStr fs.readFile('./file/2.txt', 'utf8', function(err, dataStr) { // 如果读取文件失败,则 err 会自动转译为 true if (err) { return console.log('读取文件失败!' + err.message) } console.log('读取文件成功!' + dataStr) }) 使用writeFile方法写入文件的内容// 1.导入 fs 模块 const fs = require('fs') // 2.调用 fs.writeFile() 方法,写入文件的内容 // 参数1:文件存放的路径 // 参数2:要写入的内容 // 参数3:回调函数 fs.writeFile('./file/2.txt', 'abc', function(err) { // 如果文件写入成功,则 err 的值为 null // 如果文件写入失败,则 err 的值为 错误对象 console.log(err) }) 判断写入文件是否成功// 1.导入 fs 模块 const fs = require('fs') // 2.调用 fs.writeFile() 方法,写入文件的内容 // 参数1:文件存放的路径 // 参数2:要写入的内容 // 参数3:回调函数 fs.writeFile('./file/2.txt', 'abc', function(err) { // 如果文件写入失败,则 err 会自动转译为 true if (err) { return console.log('文件写入失败!' + err.message) } console.log('文件写入成功!') })
2023年07月24日
32 阅读
0 评论
1 点赞
2023-07-24
path模块
简介path 模块是专门为了解决路径因动态拼接而导致一系列错误而生的一款工具。使用 path.join() 方法拼接文件路径// 1.导入 path 模块 const path = require('path') // path.join() 方法会将所有的路径片段拼接到一起 // 注意:../ 会抵消前面的路径 const pathStr = path.join('/a', '/abc', '../', './d', 'e') console.log(pathStr) // 输出结果为:\a\d\e 重构之前的读取文件代码// 1.导入 fs 模块 const fs = require('fs') // 2.导入 path 模块 const path = require('path') // 3.调用 fs.readFile() 方法读取文件 // 参数1:文件路径 // 参数2:读取文件的编码格式,默认 utf8 // 参数3:回调函数,拿到失败和成功的结果 err, dataStr // __dirname 表示当前文件的所处路径 fs.readFile(path.join(__dirname, '/file/1.txt'), 'utf8', function(err, dataStr) { // 如果读取文件失败,则 err 会自动转译为 true if (err) { return console.log('读取文件失败!' + err.message) } console.log('读取文件成功!' + dataStr) }) 使用 path.basename() 方法获取文件名称// 1.导入 path 模块 const path = require('path') // 定义文件的存放路径 const fpath = '/a/b/index.html' const fullName = path.basename(fpath) console.log(fullName) // 结果为:index.html const name = path.basename(fpath, 'html') console.log(name) // 结果为:index 使用 path.extname() 方法获取文件扩展名// 1.导入 path 模块 const path = require('path') // 定义文件的存放路径 const fpath = '/a/b/index.html' const fext = path.extname(fpath) console.log(fext) // 结果为:.html
2023年07月24日
48 阅读
0 评论
0 点赞
2023-07-24
express路由
路由的简单用法// 导入 express 模块 const express = require('express') // 创建 web 服务器 const app = express() // 挂载路由 app.get('/', (req, res) => { res.send('Hello World') }) app.post('/', (req, res) => { res.send('请求成功!') }) // 启动 web 服务器 app.listen(80, () => { console.log('express server running at http://127.0.0.1') })模块化路由1.创建一个 web 服务器(命名index.js)// 1.导入 express 模块 const express = require('express') // 2.创建 web 服务器 const app = express() // 3.启动 web 服务器 app.listen(80, () => { console.log('server running at http://127.0.0.1') })2.再创建一个路由模块(命名router.js)// 这是一个路由模块 // 1.导入 express 模块 const express = require('express') // 2.创建路由对象 const router = express.Router() // 3.挂载具体的路由 router.get('/user/list', (req, res) => { res.send('用户列表数据') }) router.post('/user/add', (req, res) => { res.send('添加成功!') }) // 4.导出路由对象 module.exports = router3.导入并注册路由模块// 1.导入 express 模块 const express = require('express') // 2.创建 web 服务器 const app = express() // 4.导入路由模块 const router = require('./router') // 5.注册路由模块 app.use(router) // 3.启动 web 服务器 app.listen(80, () => { console.log('server running at http://127.0.0.1') })为路由模块添加前缀// 与托管静态资源时相同,在注册路由模块时为其添加 app.use('/api', router)
2023年07月24日
44 阅读
0 评论
0 点赞