快速异步发布请求

时间:2018-01-23 15:03:58

标签: javascript node.js express asynchronous

我的代码

后端的代码将获取发布数据并调用异步函数

app.post('/login', async (req, res) => {
   var mail = decodeURIComponent(req.body.mail), password;
   await bcrypt.hash(decodeURIComponent(req.body.password), saltRounds, function(err, hash) {
       ...
   });
});

问题

如果我想启动应用程序,我会收到此警告:

  

[DEP0013]弃用警告:在没有回调的情况下调用异步函数是不可取的

有更好的解决方案吗?

修改

如果我这样做,我会收到同样的警告,但我不知道如何在这里进行回调。

app.post('/login', async (req, res) => { res.json({ success: true }); });

1 个答案:

答案 0 :(得分:1)

bcryptthis one,对吗?)不是一个宣传的图书馆。

你不能await其功能。

app.post('/login', (req, res) => {
  bcrypt.hash(req.body.password, saltRounds, (err, result) => {
    if (err) {
      // error
      return;
    }
    // success
  });
});

但如果你愿意,你可以promisify

const util = require('util');
const bcrypt = require('bcrypt');
const hashAsync = util.promisify(bcrypt.hash);

app.post('/login', (req, res) => {
  hashAsync(req.body.password, saltRounds).then(result => {
    // success
  }).catch(err => {
    // error
  });
});

当然,上述内容也可以写成async / await。不过,不要忘记try / catch

另外,我确信您不必进行任何URL解码。 req.body中的所有值都已解码。自己调用decodeURIComponent()意味着您将最终解码值两次。一旦值实际在某处包含%xx之类的内容,这将导致错误 - 特别是在密码中,这迟早会发生。