javascript - NodeJS Express 应用程序 await 仅在异步函数中有效,但这显然是异步函数?

标签 javascript node.js express async-await

我做了一个函数来检查某个东西是否已经存在于数据库中。我只是简单地复制粘贴了我用来在数据库中获取内容的逻辑,并更改了查询对象 + 返回的内容。但现在 Node 似乎不喜欢那样,只是抛出一个对我来说毫无意义的错误。

调用函数的地方:

let exists = await queryDatabaseExists(uniqueQuery, res);

我调用的函数:

async function queryDatabaseExists(queryParam, res) {
    try {
        const cp = new sql.ConnectionPool(config);
        await cp.connect();
        let result = await cp.request().query(queryParam);
        if(result.recordset.rowsAffected[0] = 1){return true} else { return false }
    } catch (err) {
        res.status(520).send(`Database error: ${err}`);
    }
}

我得到的错误:

let exists = await queryDatabaseExists(uniqueQuery, res);
             ^^^^^

SyntaxError: await is only valid in async function

该路线的所有代码:

router.post("/admin/category", (req, res) => {

    uniqueQuery = `SELECT [name] from [dbo].[idtTV_categories] WHERE [name] = '${req.body.name}'`

    getQuery = `SELECT [id]
    ,[name]
    ,[description]
    ,[created_time]
    ,[created_by] from [dbo].[idtTV_categories]`

    standardQuery = `INSERT INTO [dbo].[idtTV_categories] ([name],[description],[created_time],[created_by]) 
    VALUES 
    ('${req.body.name}', 
    '${req.body.description}',
    SYSDATETIME(),
    '${req.user.name}')`;

    let exists = checkIfExists();

    function checkIfExists() { result = await queryDatabaseExists(uniqueQuery, res); return result} ;

    console.log(exists);

    if(req.user.roles.some(role => role === admin || role === editor)){
        if(!existsInDatabase){
        if(queryDatabase(standardQuery, res)){queryDatabase_get(getQuery, res)}
    }
}

    else { res.statusMessage = `${req.user.name} is not authorized to add categories.`;
           console.log(req.user.roles)
           res.status(520).send() };

})

所有被调用的函数:

///////////// MAIN QUERYING FUNCTION //////////////////////
async function queryDatabase_get(queryParam, res) {
    try {
        const cp = new sql.ConnectionPool(config);
        await cp.connect();
        let result = await cp.request().query(queryParam);
        res.send(result.recordset);
    } catch (err) {
        res.status(520).send(`Database error: ${err}`);
    }
}

async function queryDatabaseExists(queryParam, res) {
    try {
        const cp = new sql.ConnectionPool(config);
        await cp.connect();
        let result = await cp.request().query(queryParam);
        if(result.recordset.rowsAffected[0] = 1){return true} else { return false }
    } catch (err) {
        res.status(520).send();
    }
}

async function queryDatabase(queryParam, res) {
    try {
        const cp = new sql.ConnectionPool(config);
        await cp.connect();
        let result = await cp.request().query(queryParam);
        if(result.rowsAffected > 0){ return true }
    } catch (err) {
        res.status(520).send(`Database error: ${err}`);
    }
}

最佳答案

它必须在异步内部。 例如:

app.post('/', async (req, res) => {
  let exists = await queryDatabaseExists(uniqueQuery, res);
});

关于javascript - NodeJS Express 应用程序 await 仅在异步函数中有效,但这显然是异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993247/

相关文章:

JavaScript/如何在 node.js 中创建一个新对象?

node.js - 如何在 Typescript 中表示抽象类的任何子类的类型?

javascript - 如何在 Nodejs 和 Express 中更好地组织我的路线?

javascript - 当光标位于文本字段内时如何编写按键事件

javascript - 字符串的有序更改(javascript)

javascript如何在不使用警报的情况下创建验证错误消息

javascript - 有没有办法让我发送 args[1] args[2] 次?

node.js - 如何使用 Node.js 在 MongoDB 中查找记录

express - Firebase 和 Express 的云函数

javascript - 如何在 MongoDB 中的一个数组中搜索另一个数组中的项目?