推流
推流就是一边获取一边传输的能力,常见是视频播放。在AI生成中也会常用到,推流有助于提高用户体验。在前端测试中,只有浏览器端的原生就去 fetch
才有 streaming 的能力,其它方法不行!Nuxt的 useFetch, $fetch
都不行!
const url = "http://localhost:6200/test"
const prompt = "天空为什么是蓝色的?"
let query = [{role: "user", content: prompt}]
let dataObj = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
query: query,
})
}
const response = await fetch(url, dataObj)
if (response.ok) {
let i = 0
let getStream = function (reader) {
return reader.read().then(function (result) {
// 如果数据已经读取完毕,直接返回
if (result.done) {
return
}
// 取出本段数据(二进制格式)
let chunk = result.value
let text = that.utf8ArrayToStr(chunk)
// 将本段数据追加到网页之中
messageDiv.innerHTML += text
messageDiv.textContent += text
// 递归处理下一段数据
return getStream(reader)
})
}
getStream(response.body.getReader())
}
加密
import bcrypt from 'bcrypt'
const saltRounds = 10
//加密
set(val) {
let salt = bcrypt.genSaltSync(saltRounds)
let hash = bcrypt.hashSync(val, salt)
return hash
}
// 验证密码 为true则正确
const isPasswordValid = bcrypt.compareSync(
req.body.password,
user.password
)
jwt验证
Json Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输信息作为 JSON 对象。此信息可以进行验证和信任,因为它是经过数字签名的。可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 对公钥/私钥对对 JWT 进行签名。
可以认为JWT是用户认证的一种协议,可以理解为服务端颁发给客户端的一张身份证,拿到身份证后此后客户端进行接口访问时携带身份证,服务端通过验证以允许客户端访问服务器资源,每一项的含义:
- Json表示令牌的原始值是一个Json格式的数据
- web表示是在互联网传播
- token表示令牌
yarn add jsonwebtoken
import jwt from 'jsonwebtoken'
const SECRET = "fdfh58GGhdsa2dd@ddds"
// 生成token
const token = jwt.sign({
id: String(user._id),
}, SECRET)
//时限
let token = jwt.sign(data, SECRET, {
expiresIn: 60 * 60 * 24 * 3 // 以s作为单位(目前设置的过期时间为3天)
});
//验证
const rawToken = String(req.headers.authorization).split(' ').pop()
const tokenData = jwt.verify(rawToken, SECRET)
// console.log(666, tokenData) //{ id: 'dddxx', iat: 1684119284, exp: 1684119304 }
推流、加密和验证是现阶段AI开发中非常实用的功能,如果你要开发个AI应用,那就不妨用起来吧!