如果表单没有发送两次,则承诺不希望输入

时间:2019-07-14 11:59:02

标签: node.js express asynchronous post promise

我正在使用Expressjs和Neo4j DB在Node.js中的登录页面上工作。

我想用一个函数检查数据库中是否已经存在用户。 因此,我创建了一个名为Users的模型(MVC),并在其中声明了一个Class,并且方法是isUserAlreadyExist。

我的问题是我要从此方法返回一个诺言以在控制器上处理它,但随后的关闭不起作用,我必须在网页上重新发送表格才能处理结果。

  

这是我的控制器代码:

exports.postRegister = (req, res, next) => { //async
if(req.method == "POST")
{
    const login = req.body.login;
    const passwd = req.body.passwd;
    console.log('login = '+login +' passwd = '+passwd);
    if(login == null || passwd == null)
    {
        return res.status(400).send('Error: Params missings');
    }
    else {
        const new_user = new User(login, passwd);
        new_user.isUserAlreadyExist().then((result) =>{
            console.log(result)
        }).catch((err) =>{
            console.err(err);
        })
    }
}

}

  

这是我的模型用户的一部分

    async isUserAlreadyExist()
{
    const session = db.session();
    const params = this.login;

    const cypher = "MATCH (a:User) WHERE a.login = {login} RETURN a";
    const params = {login : login};

    return new Promise((resolve, reject) => {
        session.run(cypher, params).then(result => {
            session.close()
            resolve(result.records.length);
        }).catch(err =>{
            session.close()
        })
    });
}
  

正如@robertklep和@ solooo7所建议的那样,我进行了更改,但情况是相同的

isUserAlreadyExist()
{
    const session = db.session();
    const login = this.login;

    const cypher = "MATCH (a:User) WHERE a.login = {login} RETURN a";
    const params = {login : login};

    return (session.run(cypher, params)
    .then(result => {
        session.close();
        return result.records.length;
    })
    .catch(err =>{
        session.close();
        return (-1);
    })
}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。问题在于我处理表单(postRegister)的函数不是异步函数,并且该函数没有等待处理。

这是我的控制器的新代码:

exports.postRegister = async (req, res, next) => { //async
    const login = req.body.login;
    const passwd = req.body.passwd;
    console.log('login = '+login +' passwd = '+passwd);
    if(login == null || passwd == null)
    {
        return res.status(400).send('Error: Params missings');
    }
    else {
        const new_user = new User(login, passwd);
        await new_user.isUserAlreadyExist().then((result) =>{
            console.log(result)
            res.redirect('/');
        }).catch((err) =>{
            console.err(err);
            res.redirect('/');
        })
    }
    console.log('end');
}

感谢所有帮助我的人!