node.js - 如何将我的 userSchema 中的枚举设置为空默认值
问题描述
我目前正在为使用 MongoDB 作为数据库、ExpressJS 和 PassportJS 的项目编写注册表单,但是,我试图让用户能够选择角色,然后像这样在数据库中注册以重定向到用户登录后的正确页面。
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: String,
username: String,
password: String,
role: {
type: String,
enum: ['COMPANY', 'IRONHACKER', 'ADMIN'],
default: 'IRONHACKER',
},
session: String,
last_login: {
type: Date,
default: ""
}
}, {
timestamps: {
createdAt: "created_at",
updatedAt: "updated_at"
},
});
const User = mongoose.model("User", userSchema);
module.exports = User;
默认情况下,它有 3 个值,用户只能选择 2 个:IRONHACKER 和 COMPANY。
目前,它的行为有所不同,因为我将“IRONHACKER”设置为默认值,所以它始终是用户注册后得到的。
解决方案
我找到了一个解决方案,它实际上非常完美!
我保持 userSchema 相同
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: String,
username: String,
password: String,
role: {
type: String,
enum: ['COMPANY', 'IRONHACKER', 'ADMIN'],
default: 'IRONHACKER',
},
session: String,
last_login: {
type: Date,
default: ""
}
}, {
timestamps: {
createdAt: "created_at",
updatedAt: "updated_at"
},
});
const User = mongoose.model("User", userSchema);
module.exports = User;
我唯一修改的是注册表单配置:(注册表没有此功能,仅用于测试目的)。
<h2>Signup</h2>
<form action="/signup" method="POST" id="form-container">
<label for="name">Full Name</label>
<input id="name" type="name" name="name" placeholder="Provide your Name">
<br>
<br>
<label for="username">Username</label>
<input id="username" type="text" name="username" placeholder="Set Username">
<br>
<br>
<label for="password">Password</label>
<input id="password" type="password" name="password" placeholder="Set a password">
<br>
<br>
<select name="role" id="role">
<option value="" disabled="disabled" selected="selected">--Please choose an option--</option>
<option value="IRONHACKER">Ironhacker</option>
<option value="COMPANY">Employer</option>
<option value="ADMIN">Administrator</option>
</select>
{{#if message}}
<div class="error-message">{{ message }}</div>
{{/if}}
<br>
<br>
<button>Create account</button>
<p class="account-message">
Do you already have an account?
<a href="/login">Login</a>
</p>
</form>
所以它现在检测到角色并且用户被正确地赋予了角色和权限。
推荐阅读
- flutter - 什么时候关闭 Flutter 的 Dio 包中的 Dio 客户端?
- c++ - 如何在 C++ 中制作与 Delphi 中类似的结构
- python - Python - 拼字游戏字数
- facebook - 从我的 Facebook 直播中实时检索 Facebook 直播评论
- typescript - 打字稿抽象属性
- java - 处理函数之外的资源的 AWS 容器重用和同步
- python-3.x - 如果从命令行调用一个类而不是在代码中调用一个类,python 中是否有办法运行不同的函数?
- powerbi - Power BI 计算多级矩阵中两列之间的差异
- c# - 关于解决问题的最佳方法的建议 - C# Windows 表单(列表框、文本框、用户输入)
- javascript - 让 TestCafe 显示一个对象差异