Console Error: await is only valid in async functions and the top level bodies of modules
Console Error: await is only valid in async functions and the top level bodies of modules
我正在 nodejs 中创建登录功能,我想通过哈希将密码存储在 mysql 数据库中:
我正在使用 bcrypt 库。
bcrypt.hash(password, 10, function(err, hash) {
console.log(hash);
});
上面的代码对我来说工作正常,但如果我想像下面这样使用 await
let hashedPassword = await bcrypt.hash(password,10);
它显示以下错误为
let hashedPassword = await bcrypt.hash(password,10);
^^^^^
SyntaxError: await is only valid in async functions and the top level bodies of modules
注意:我的目标是以异步方式使用它,所以使用 await。而疑问是,
- 第一个异步工作
- 第二个是我从视频中得到的,它可以工作,但在我的情况下不行,所以这里有什么问题
以下是详细信息的总控制器代码:
const db = require("../connection");
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
exports.register = (req,res) => {
const {name, email, password, cpassword} = req.body;
db.query('SELECT * FROM users WHERE email=?', [email],(error,result)=>{
if(error){
console.log(error);
} else if(result.length > 0){
return res.render('signup',{
message:'Email already exists!'
})
} else if(password !== cpassword){
return res.render('signup',{
message: 'Passwords do not match!!'
});
}
let hashedPassword = await bcrypt.hash(password,10);
console.log(hashedPassword);
// bcrypt.hash(password, 10, function(err, hash) {
// console.log(hash);
// });
});
}
你的注册函数不是异步的。试试这个:
exports.register = async (req,res) => {
...rest of the code
}
在异步函数中,您必须了解的基本知识是使函数异步然后使用 await,但是您的代码中没有异步函数会抛出错误。
因此,您必须将父函数设置为异步类型。更新了下面的代码
#previous code..
db.query('SELECT * FROM users WHERE email=?', [email], async (error,result)=>{
#other codes here..
let hashedPassword = await bcrypt.hash(password,10);
console.log(hashedPassword);
});
#next code..
这样你就可以同时使用hash和salt
我正在 nodejs 中创建登录功能,我想通过哈希将密码存储在 mysql 数据库中: 我正在使用 bcrypt 库。
bcrypt.hash(password, 10, function(err, hash) {
console.log(hash);
});
上面的代码对我来说工作正常,但如果我想像下面这样使用 await
let hashedPassword = await bcrypt.hash(password,10);
它显示以下错误为
let hashedPassword = await bcrypt.hash(password,10);
^^^^^
SyntaxError: await is only valid in async functions and the top level bodies of modules
注意:我的目标是以异步方式使用它,所以使用 await。而疑问是,
- 第一个异步工作
- 第二个是我从视频中得到的,它可以工作,但在我的情况下不行,所以这里有什么问题
以下是详细信息的总控制器代码:
const db = require("../connection");
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
exports.register = (req,res) => {
const {name, email, password, cpassword} = req.body;
db.query('SELECT * FROM users WHERE email=?', [email],(error,result)=>{
if(error){
console.log(error);
} else if(result.length > 0){
return res.render('signup',{
message:'Email already exists!'
})
} else if(password !== cpassword){
return res.render('signup',{
message: 'Passwords do not match!!'
});
}
let hashedPassword = await bcrypt.hash(password,10);
console.log(hashedPassword);
// bcrypt.hash(password, 10, function(err, hash) {
// console.log(hash);
// });
});
}
你的注册函数不是异步的。试试这个:
exports.register = async (req,res) => {
...rest of the code
}
在异步函数中,您必须了解的基本知识是使函数异步然后使用 await,但是您的代码中没有异步函数会抛出错误。 因此,您必须将父函数设置为异步类型。更新了下面的代码
#previous code..
db.query('SELECT * FROM users WHERE email=?', [email], async (error,result)=>{
#other codes here..
let hashedPassword = await bcrypt.hash(password,10);
console.log(hashedPassword);
});
#next code..
这样你就可以同时使用hash和salt