Jer*_*rry 10 mongoose mongodb node.js graphql
我对 Node/GraphQL/MongoDB/Moogose 比较陌生。我正在尝试创建一个突变来使用 bcryptjs 而不是纯文本来加密用户的密码。但是,我遇到了此错误: TypeError:无法读取未定义的属性“哈希”
我来自 Python 背景,我在理解异步编程时遇到一些困难这是我的 schema.js 的代码块
const RootMutation = new GraphQLObjectType({
name: 'RootMutationType',
fields: {
createUser: {
type: UserType,
args: {
email: { type: new GraphQLNonNull(GraphQLString) },
password: { type: new GraphQLNonNull(GraphQLString) },
},
resolve(parents, args) {
User.findOne({ email: args.email })
.then(user => {
if(user) {
throw new Error('This email has already been used!');
}
return bcrypt.hash(args.password, 12); // Error at this line
})
.then(hashedPassword => {
let user = new User({
email: args.email,
password: hashedPassword,
});
return user.save();
})
.catch(err => {
throw err;
});
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过,但收到错误无法读取未定义的属性“genSalt”:
createUser: {
type: UserType,
args: {
email: { type: new GraphQLNonNull(GraphQLString) },
password: { type: new GraphQLNonNull(GraphQLString) },
},
resolve(parents, args) {
User.findOne({ email: args.email })
.then(user => {
if(user) {
throw new Error('This email has already been used!');
}
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(args.password, salt, function(err, hash) {
let user = new User({
email: args.email,
password: hash,
});
return user.save();
});
});
});
Run Code Online (Sandbox Code Playgroud)
更新: 我现在可以在更改为以下内容后在我的 MongoDB 中创建一个用户:事实证明这是因为我正在使用:
const {bcrypt} = require('bcryptjs');
代替
const bcrypt = require('bcryptjs'); // this is working
有人可以解释有什么区别吗?我正在使用ES6。
另外,我的 graphql突变似乎没有返回正确的查询。突变命令
mutation {
createUser(email: "test3@test.com", password: "testpassword") {
email
password
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
{
"data": {
"createUser": null
}
}
Run Code Online (Sandbox Code Playgroud)
Zan*_*lan 25
尝试
import * as bcrypt from 'bcrypt';
Run Code Online (Sandbox Code Playgroud)
更新:当您尝试访问未定义变量的属性时,会发生 TypeError: Cannot read property 'hash' of undefined 错误。在这种情况下,您似乎在使用 bcryptjs 时尝试访问未定义变量的哈希属性。
切换到 import * as bcrypt from 'bcrypt' 之所以有效,是因为它将整个 bcrypt 模块作为对象导入,其中包括哈希函数。这意味着当您调用 bcrypt.hash() 时,将从导入的模块中调用哈希函数。
小智 0
Cannot read property 'hash' of undefined
在像这样声明 bcrypt 后为我修复了:
const bcrypt = require("bcrypt");
Run Code Online (Sandbox Code Playgroud)
而不是这个
const {bcrypt} = require('bcryptjs');
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14180 次 |
最近记录: |