nodejs中连接redis
npm下载ioredis库
npm i ioredis
我的redis配置文件单独放在了redis.js
const { promisify } = require('util');
const Redis = require('ioredis');
function connectRedis() {
const client = new Redis({
host: '127.0.0.1', // redis地址
port: 6379, //端口
password: '123456' //密码
});
return new Promise((resolve, reject) => {
client.on('connect', () => {
console.log('Redis连接成功');
resolve(client);
});
client.on('error', (err) => {
console.error('Redis连接失败:', err);
reject(err);
});
});
}
async function setAsync(client, key, value) {
const setAsync = promisify(client.set).bind(client);
try {
const result = await setAsync(key, value);
console.log('键值对设置成功');
return result;
} catch (error) {
console.error('设置键值对出错:', error);
throw error;
}
}
async function getAsync(client, key) {
const getAsync = promisify(client.get).bind(client);
try {
const result = await getAsync(key);
console.log('获取到的值为:', result);
return result;
} catch (error) {
console.error('获取值出错:', error);
throw error;
}
}
module.exports = {
connectRedis,
setAsync,
getAsync
};
在登录的时候使用 key是userId,value是token
注意要先引入你的redis.js文件
static async login(req, res) {
const { email, password } = req.body;
let token = ''
let userId = ''
// 在用户集合中查找匹配的用户
const user = await UserModel.findOne({ email, password });
if (!user) {
return res.status(401).json({ error: '邮箱或密码错误' });
} else {
userId = user._id.toString()
// 生成 JWT 令牌
token = jwt.sign({ userId: userId }, 'secret-key', { expiresIn: '24h' });
console.log(token);
console.log(userId, 11);
// 将 JWT 令牌存入 Redis
console.log(userId, token);
// 返回令牌给客户端
try {
const client = await connectRedis();
await setAsync(client, userId, token);
client.quit();
} catch (error) {
console.error('操作出错:', error);
}
res.status(200).json({ token: token, msg: '登录成功!' });
}
}