Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 快速异步post请求 我的代码_Javascript_Node.js_Express_Asynchronous - Fatal编程技术网

Javascript 快速异步post请求 我的代码

Javascript 快速异步post请求 我的代码,javascript,node.js,express,asynchronous,Javascript,Node.js,Express,Asynchronous,我在后端的代码将获取post数据并调用一个异步函数 app.post('/login', async (req, res) => { var mail = decodeURIComponent(req.body.mail), password; await bcrypt.hash(decodeURIComponent(req.body.password), saltRounds, function(err, hash) { ... }); }); 问题 如

我在后端的代码将获取post数据并调用一个异步函数

app.post('/login', async (req, res) => {
   var mail = decodeURIComponent(req.body.mail), password;
   await bcrypt.hash(decodeURIComponent(req.body.password), saltRounds, function(err, hash) {
       ...
   });
});
问题 如果我想启动应用程序,我会收到以下警告:

[DEP013]弃用警告:在不回调的情况下调用异步函数是弃用

有更好的解决办法吗

编辑 如果我这么做的话,我会得到同样的警告,但我不知道如何才能在这里进行回调

app.post('/login', async (req, res) => { res.json({ success: true }); });
bcrypt
(,对吗?)不是一个有前途的库

您不能等待它的功能

app.post('/login', (req, res) => {
  bcrypt.hash(req.body.password, saltRounds, (err, result) => {
    if (err) {
      // error
      return;
    }
    // success
  });
});
但是如果你想的话,你可以

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
/
wait
。不过,别忘了
试试
/
捕捉


此外,我相信你不必做任何URL解码。
req.body
中的所有值都已解码。自己调用
decodeURIComponent()
意味着您将对值进行两次解码。当值实际包含类似于
%xx
的内容时,这将导致错误-尤其是在密码中,这迟早会发生。

如果使用
async
关键字,则无需向
散列方法传递回调函数<代码>等待bcrypt.hash(myPlaintextPassword,salthards)
。如果错误仍然存在,请将回调添加到控制器
async(req,res,next)=>{
我确信您不必执行任何URL解码。
req.body
中的所有值都已解码。执行此操作将导致错误。请确保在try/catch:
app.post('/login',async>中始终包装
wait
(req,res,next)=>{try{wait…}catch(e){next(e);}}
你为什么要使用wait?现在我真的很好奇为什么这被否决了。我不知道它是如何解决这个问题的。它表明问题在使用bcrypt和不使用bcrypt时都会发生。你自己在问题下的评论基本上提到了与这个答案完全相同的内容,所以我不太明白你的观点。也许我们应该等等直到OP尝试代码?不,我认为OP对
async
在哪里合适有一个错误的理解。看最后一个例子,那里没有等待,async仍然在使用。你的答案根本没有解决这个问题。是的,OP的误解是他可以以某种方式
等待
回调函数,并且为了在一个函数中使用
wait
,因为某种原因,他知道函数本身必须以
async
作为前缀。他在没有真正理解的情况下从某个地方复制了这个前缀。这怎么会使我的答案不正确?这又如何促进对这个问题的否决票(如果这也是你的,我认为是你的)。