为我的英语不好而感到抱歉。我正在学习JavaScript,并且Google O2Auth有点问题,在我的节点服务器中,当Google令牌无效或过期时,我尝试停止代码,但是在catch中的“ return”发送http响应,而我可以在Postman中看到它,但是代码继续执行,如果要停止捕获之外的代码,我必须放一个糟糕的东西。
代码在这里
// The google code for NodeJS
async function verify(token) {
var ticket = await client.verifyIdToken({
idToken: token,
audience: GOOGLE_CLIENT_ID
});
var payload = ticket.getPayload();
return {
nombre: payload.name,
email: payload.email,
img: payload.picture,
google: true
}
}
// My code
app.post('/google', async (req, res) => {
var token = req.body.token;
// Here is the problem, in the .catch i put a return 403... but the code don't stop and enter in the Usuario.FindOne.
var googleUser = await verify(token).catch(err => {
return res.status(403).json({
ok: false,
mensaje: 'Token de google inválido',
errors: { message: 'Token de google inválido' }
});
});
Usuario.findOne({ email: googleUser.email }, (err, usuario) => {
if (err) {
return res.status(500).json({
ok: false,
...
...
...
问题是代码不会在返回的“状态403”中停止,在该函数输入findOne函数之后,如果发现任何错误,就会停止代码...
当令牌无效(因为没有收到电子邮件)而没问题时,但是当令牌过期时,我会收到一封电子邮件,并且我的节点服务器崩溃!
问题是,我需要破坏verify(token).catch()中的代码吗?
谢谢!
答案 0 :(得分:2)
您只有return
从回调函数传递到了其中的catch
方法。这不会阻止其他任何事情。
请改用try
/ catch
,其中return
将从async function
中退出:
app.post('/google', async (req, res) => {
var token = req.body.token;
try {
var googleUser = await verify(token);
} catch (err) {
res.status(403).json({
ok: false,
mensaje: 'Token de google inválido',
errors: { message: 'Token de google inválido' }
});
return;
}
try {
var usuario = await new Promise((resolve, reject) => {
Usuario.findOne({ email: googleUser.email }, (err, usuario) => {
if (err) reject(err);
else resolve(usario);
});
});
} catch(err) {
return res.status(500).json({
ok: false,
…