我正在使用 nodejs 开发一个快速应用程序。基本上,我的问题是登录功能与 Postman 配合得很好,但是一旦我们将它连接到前端并尝试通过浏览器运行它,大部分代码都会失败。
这是我的 server.js 文件中有问题的行
app.post('/login', login)
我也试过
app.get('/login', login)
当我们用 Postman 运行时,用户被放入了 redis db,生成了访问令牌,一切都很好但是当我们通过浏览器运行时,虽然调用了登录并生成了访问令牌,但用户并没有放入redis db并且没有生成控制台日志,所以我什至不确定出了什么问题。
这是我的登录功能。
const login = (req, res, next) => {
console.log(req)
const {email, password} = req.body;
console.log('req', req)
console.log('email: ', email)
console.log('password: ', password)
mongoose.connect(uri, {useNewUrlParser: true, useUnifiedTopology: true})
.then(() => {
const db = mongoose.connection;
const UserModel = db.model('User', userSchema, 'users')
const query = UserModel.find({"email": {"$eq": email}, "password": {"$eq": password}})
query.collection(UserModel.collection);
query.exec((err, user) => {
console.log('user ', user)
if (user != []) {
user[0].hidden = false;
user[0].save();
const accessToken = generateAccessToken({email: email});
user = user[0]
res.json({
id: user.id,
email: user.email,
name: user.firstName + user.lastName,
token: accessToken,
});
redisClient.get(user.id, (error, data) => {
if (error) {
res.send({error});
}
if (data !== null) {
const parsedData = JSON.parse(data);
parsedData[user.id].push(accessToken);
redisClient.setex(user.id, 36000, JSON.stringify(parsedData));
console.log("user already in redis db ")
db.close()
next();
}
const whiteList = {
[user.id]: [accessToken],
};
redisClient.setex(user.id, 36000, JSON.stringify(whiteList));
});
} else {
res.send('Incorrect email or password');
}
})
//.then( () => {})
})
.catch(err => {
console.error('Database connection error: ', err)
})
}
任何建议将不胜感激。