NodeJS 中的异步 post 函数

Dod*_*zik 5 javascript node.js promise ecmascript-6

我正在尝试查询 mssql 数据库以获取用户的密码,即发送 post 请求,然后将其显示在控制台中。但我做出的承诺并没有按照我想要的方式工作,并且密码没有加载到变量中。这是我的代码:

app.post('/test', function () {
    let user = 'User';
    let query = 'SELECT [Password] as password FROM [Table] where [User] = ' + SqlString.escape(user);

    let password = (async function () {
        try {
            let pool = await sql.connect(dbConfig);
            let result = await pool.request()
                .query(querys);
            console.dir(result.recordset[0].password) //Value here is OK
            return result.recordset[0].password
        } catch (err) {
            // ... error checks
        }
    })()
    console.log(password); //here I am getting "Promise { pending }"
});
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:Promise {pending}'DatabasePassword'

Kei*_*ith 7

这是与express一起使用的示例async / await

Express 不处理错误,但这不是什么大问题,您可以自己处理它们,您甚至可以包装到通用错误处理程序中以使事情变得更容易。

无论如何,这是您修改后的代码以在express中使用async/await

app.post('/test', async function (req, res) {
  try {  
    const user = 'User';
    const query = 'SELECT [Password] as password FROM [Table] where [User] = ' + SqlString.escape(user);
    const pool = await sql.connect(dbConfig);
    const result = await pool.request()
      .query(querys);
    const password = result.recordset[0].password;
    console.log(password);
    res.end(password);
  } catch (e) {
    res.end(e.message || e.toString());
  }
});
Run Code Online (Sandbox Code Playgroud)