【发布时间】:2021-03-26 04:20:44
【问题描述】:
我正在使用 Express、NodeJS 和 MongoDB 进行身份验证/会话。
Mongoose 架构如下所示:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const userSchema = new Schema({
username: { type: String, required: true, },
email: { type: String, required: true, unique: true, },
password: { type: String, required: true, },
SignUpDate: { type: { type: Date, default: Date.now } },
LastLogin: { type: { type: Date, default: Date.now } },
loggedin: { type: Boolean, required: false, },
attempts: { type: Number },
});
module.exports = mongoose.model("User", userSchema);
注册表单只需要用户名、电子邮件、密码,但我想保存签名更新、上次登录、失败的登录尝试等。
在 controller.js 文件中,我有路由,这是有问题的。
exports.register_post = async (req, res) => {
const { username, email, password } = req.body;
let user = await User.findOne({ email });
if (user) {
req.session.error = "User already exists";
return res.redirect("/register");
}
const hasdPsw = await bcrypt.hash(password, 12);
user = new User({
username,
email,
password: hasdPsw,
SignUpDate,
loggedin: true
});
await user.save();
console.log(user)
res.redirect("/login");
};
在 App.JS 我有这个
app.post("/register", appController.register_post);
如果我在 Schema 中只使用用户名、电子邮件和密码,一切正常,保存到数据库中。
但如上所述,我明白了
"UnhandledPromiseRejectionWarning: ReferenceError: SignUpDate is not 定义”
如果我在 /register 路由上提交注册按钮。另一个问题,如果我想获得 Mongoose 的时间戳,是否必须拨打 Date.now() 以及在哪里?
或者我是否必须在用户注册后定义并添加/推送不是用户通过 Signup Post ( SignUpDate,LastLogin:,loggedin:,attempts ) 提供的属性到架构?我是使用 Mongoose 的新手,浏览了文档,但似乎找不到如何添加时间戳。
一点更新,如果我在 post 函数中注释掉 SignUpDate,LastLogin 变量,我在 MongoDBcompass 中得到“对象,对象”并且对象是可折叠的,它将值保存在数据库中但应用程序崩溃了。必要的改变很简单
SignUpDate: { type: { type: Date, default: Date.now } },
LastLogin: { type: { type: Date, default: Date.now } },
到
SignUpDate: {
type: Date, default: Date.now(),
},
LastLogin: {
type: Date, default: Date.now(),
}
这就是它在数据库中的样子,它会被保存并且应用程序不会崩溃。但是一旦我在路由函数中取消注释“SignUpDate”,我就会再次收到相同的未定义错误。
我可以忍受这个,但宁愿不要。此外,如何将“type: Date, default: Date.now()”转换为“Sun May 10 2015 19:50:08 GMT-0600 (MDT)”之类的好输出?如果我在Schema,它不起作用,如果我在路由函数中更改它,它不会让我链接函数,而且我不知道在哪里声明 var 以获得漂亮的格式化输出。
【问题讨论】:
标签: node.js mongodb express mongoose