在等待时出错,该等待仅在使用异步函数时对异步函数有效

佩佩加

我正在使用异步功能来确认用户是否存在于具有相同用户名或电子邮件的数据库中。

事情是我在单独的文件中有异步功能。我正在将文件导入到某些端点的路由中。

当我在删除后发送注册用户的请求时

await

从 User.CreateNewUser 和 User.ValidateUserExists 它通过,但是当我再次发送相同的请求时,相同的用户被添加到数据库中,而不验证用户是否存在于数据库中。

这是我的路线

const express = require("express");
const router = express.Router();
const asyncHandler = require('../helpers/asyncHandler');
const validate = require('validate.js');
const User = require('../controllers/user-exists-check');


//Route for creating user

router.post('/', asyncHandler((req,res) => {
    const constraints = {
        username: {
            presence: true,
            length:{minimum:4,maximum:10}
        },
        password: {
            presence: true,
            length:{minimum:6, maximum:20} 
        },
        email: {
            presence: true,
            email:true
        }}
    const username = req.body.username;
    const email = req.body.email;
    const password = req.body.password;
    const permission_id = req.body.permission_id;

    const validation = validate({username, email, password}, constraints);
    if(validation) res.status(400).json({error: validation});

    const existingUser = await User.ValidateUserExists({username, email});
    if(existingUser) {
        if(username === existingUser.username) return res.status(400).json({error:`Username ${username} is already taken`});
        if(email === existingUser.email) return res.status(400).json({error:`Email is already taken`});
    }

    const newUser = await User.CreateNewUser({username, email, password, permission_id});
    return res.status(200).json({user: newUser})

}));


module.exports = router;

这是用户存在检查

const {UserNameExists, EmailExists, CreateUser} = require('./user-db-check');

async function ValidateUserExists(username, email) {
    if(!username || !email ) throw new Error('Not enough args provided')
    let ValidUsername = null;
    let ValidEmail = null;

    if(username) {
        ValidUsername = await UserNameExists(username);
    }
    if(email) {
        ValidEmail = await EmailExists(email);
    }
    if(ValidUsername && ValidEmail) return ValidUsername;
    return null;
}

async function CreateNewUser(args){
    return await CreateUser(args)
}

module.exports = {
    ValidateUserExists,
    CreateNewUser
}

我期待它抛出这个响应

if(username === existingUser.username) 
return res.status(400).json({error:`Username ${username} is already taken`});

if(email === existingUser.email) return res.status(400).json({error:`Email is already taken`});

我是否以错误的方式使用 await 和 async?有人可以请教我吗

基思

您的问题是您发送到的函数回调asyncHandler(未标记为异步,因此您在内部使用的任何函数都不能使用await.

假设你asyncHandler期待一个承诺,做asyncHandler(async (req,res) => {应该解决这个问题。

作为旁注,在查看您的代码时,您可能需要考虑一个基本的逻辑问题。执行UserNameExists/ EmailExits& then CreateUser,理论上在多用户环境中仍然可以允许存储相同的用户和电子邮件。大多数数据库都有一种叫做事务锁的东西来防止这种情况发生。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Javascript:SyntaxError:等待仅在异步函数中有效

等待仅在异步函数中有效,同时我已经在函数中放置了“异步”

即使等待位于 Node.js 中的异步函数中,如何修复“await 仅在异步函数中有效”?

module.exports SyntaxError:等待仅在异步函数中有效

module.exports SyntaxError:等待仅在异步函数中有效

为什么该函数调用抛出“等待仅在异步函数中有效”的语法错误,即使该函数是异步的?

等待仅在异步功能中有效

等待仅在异步功能中有效

等待仅在异步功能中有效

NodeJs等待仅在异步功能中有效

错误:等待仅在异步功能中有效

异步函数没有等待

TS1057:异步函数或方法必须具有有效的等待返回类型

为什么我的 await 在我的功能中不起作用?“语法错误:等待仅在异步函数中有效”

for循环中的“ await仅在异步函数中有效”

For 循环 - SyntaxError: await 仅在异步函数中有效

嵌套的异步/等待函数

异步/等待函数

使用异步并在FileReader中等待时出错

给出 await 的异步函数仅在异步函数中有效

“await 仅在异步函数中有效”,而它是一个异步函数

Await仅在使用Node.js的异步函数中有效

带伪造者的Web爬网循环:“等待仅在异步功能中有效”

discord.js机器人等待仅在异步功能中有效

语法错误:等待仅在异步功能中有效。无法更正

当我没有在异步函数前等待时,try catch块会捕获错误吗?

如何使用函数使用异步等待

使用等待/异步函数获取显示数据

尝试对数组函数使用异步/等待