Exception while invoking method 'users.insert' Error: Match error: Expected array, got "admin" in field [0].roles Reading project metadata
Exception while invoking method 'users.insert' Error: Match error: Expected array, got "admin" in field [0].roles Reading project metadata
我正在尝试插入用户集合但出现上述错误。有没有办法将字段输入数组。它需要一个数组,但我在我的角色字段中输入 admin
。如何从 UI 中将角色作为数组插入?
这是Server side
,我正在定义所有需要插入的字段。
Meteor.methods({
"users.insert"(users) {
check(users, [
{
email: String,
password: String,
username: String,
profile: {
name: { firstname: String, lastname: String },
phone: String
},
roles: [String]
}
]);
users.forEach(({ email, password, username, profile, roles }) => {
const userExists = Accounts.findUserByEmail(email);
if (!userExists) {
const userId = Accounts.createUser({
email,
password,
username,
profile
});
Roles.addUsersToRoles(userId, roles, "default-group");
}
});
}
});
Client side
、初始状态和流星呼唤
this.state = {
phone: "",
email: "",
password: "",
username: "",
roles: []
};
onSubmit(e) {
e.preventDefault();
const {
phone,
email,
password,
username,
roles
} = this.state;
const user = [
{
email,
password,
username,
profile: {
name: { firstname, lastname },
phone,
},
roles
}
];
this.props.createUser("users.insert", user);
}
Submission Form
,我在此处插入值
<form
onSubmit={this.onSubmit.bind(this)}
noValidate
className="boxed-view__form"
>
<input
className="editor__title editor__title--border"
type="tel"
name="phone"
placeholder="Contact"
value={this.state.phone}
onChange={this.onChange}
/>
<input
className="editor__title"
type="email"
name="email"
placeholder="Email"
value={this.state.email}
onChange={this.onChange}
/>
<input
className="editor__title"
type="password"
name="password"
placeholder="Password"
value={this.state.password}
onChange={this.onChange}
/>
<input
className="editor__title"
type="text"
name="username"
placeholder="username"
value={this.state.username}
onChange={this.onChange}
/>
<input
className="editor__title"
type="text"
name="roles"
placeholder="Roles"
value={!this.state.roles}
onChange={this.onChange}
/>
<button className="button">Create Account</button>
</form>
尽管您将角色初始化为状态中的数组,但是当您输入输入并将其转换为字符串时,您将覆盖它。
开始于 roles
= []
在您的 onChange
函数中,您将状态中的 roles
设置为字符串 admin
.
我们将稍微更改您创建的用户对象,而不是推送一个字符串,而是推送您在输入中键入的所有单词的数组,这样您就可以键入多个角色,它们都将被应用
这是执行此操作的代码:
roles.split(' ')
这样做是获取您传递的字符串中的每个单词,并将其作为数组中的一个元素。
admin
变为 ["admin"]
admin superuser
变为 ["admin", "superuser"]
这是应该适合您的修改后的代码。
onSubmit(e) {
e.preventDefault();
const {
phone,
email,
password,
username,
roles
} = this.state;
const user = [
{
email,
password,
username,
profile: {
name: { firstname, lastname },
phone,
},
roles: roles.split(' '),
}
];
this.props.createUser("users.insert", user);
}
我正在尝试插入用户集合但出现上述错误。有没有办法将字段输入数组。它需要一个数组,但我在我的角色字段中输入 admin
。如何从 UI 中将角色作为数组插入?
这是Server side
,我正在定义所有需要插入的字段。
Meteor.methods({
"users.insert"(users) {
check(users, [
{
email: String,
password: String,
username: String,
profile: {
name: { firstname: String, lastname: String },
phone: String
},
roles: [String]
}
]);
users.forEach(({ email, password, username, profile, roles }) => {
const userExists = Accounts.findUserByEmail(email);
if (!userExists) {
const userId = Accounts.createUser({
email,
password,
username,
profile
});
Roles.addUsersToRoles(userId, roles, "default-group");
}
});
}
});
Client side
、初始状态和流星呼唤
this.state = {
phone: "",
email: "",
password: "",
username: "",
roles: []
};
onSubmit(e) {
e.preventDefault();
const {
phone,
email,
password,
username,
roles
} = this.state;
const user = [
{
email,
password,
username,
profile: {
name: { firstname, lastname },
phone,
},
roles
}
];
this.props.createUser("users.insert", user);
}
Submission Form
,我在此处插入值
<form
onSubmit={this.onSubmit.bind(this)}
noValidate
className="boxed-view__form"
>
<input
className="editor__title editor__title--border"
type="tel"
name="phone"
placeholder="Contact"
value={this.state.phone}
onChange={this.onChange}
/>
<input
className="editor__title"
type="email"
name="email"
placeholder="Email"
value={this.state.email}
onChange={this.onChange}
/>
<input
className="editor__title"
type="password"
name="password"
placeholder="Password"
value={this.state.password}
onChange={this.onChange}
/>
<input
className="editor__title"
type="text"
name="username"
placeholder="username"
value={this.state.username}
onChange={this.onChange}
/>
<input
className="editor__title"
type="text"
name="roles"
placeholder="Roles"
value={!this.state.roles}
onChange={this.onChange}
/>
<button className="button">Create Account</button>
</form>
尽管您将角色初始化为状态中的数组,但是当您输入输入并将其转换为字符串时,您将覆盖它。
开始于 roles
= []
在您的 onChange
函数中,您将状态中的 roles
设置为字符串 admin
.
我们将稍微更改您创建的用户对象,而不是推送一个字符串,而是推送您在输入中键入的所有单词的数组,这样您就可以键入多个角色,它们都将被应用
这是执行此操作的代码:
roles.split(' ')
这样做是获取您传递的字符串中的每个单词,并将其作为数组中的一个元素。
admin
变为 ["admin"]
admin superuser
变为 ["admin", "superuser"]
这是应该适合您的修改后的代码。
onSubmit(e) {
e.preventDefault();
const {
phone,
email,
password,
username,
roles
} = this.state;
const user = [
{
email,
password,
username,
profile: {
name: { firstname, lastname },
phone,
},
roles: roles.split(' '),
}
];
this.props.createUser("users.insert", user);
}