我正在尝试插入用户集合,但出现上述错误。有没有一种方法可以将字段输入数组。期望有一个数组,但我要在我的角色字段中输入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>
答案 0 :(得分:2)
尽管您要在状态中将角色初始化为数组,但是在键入输入并将其变成字符串时,您会覆盖此角色。
以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);
}