后端的代码将获取发布数据并调用异步函数
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 }); });
答案 0 :(得分:1)
bcrypt
(this 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
之类的内容,这将导致错误 - 特别是在密码中,这迟早会发生。