node.js - TypeError:无法读取未定义的属性“q1”
问题描述
我设计了我的猫鼬模式,里面有一组对象,就像这样。这是 User.js:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var UserSchema = new Schema({
name:String,
surname:String,
questions: {
q1:{statement:String, spoof:Boolean},
q2:{statement:String, spoof:Boolean},
q3:{statement:String, spoof:Boolean}
},
color:{
red:Number,
green:Number,
blue:Number
}
});
var User = mongoose.model("User", UserSchema);
module.exports = User;`
所以我想要三个问题,然后是三个看起来不错的数字。但是,当我需要此架构并引用 User.questions 时,它说它是未定义的,即使我已经在架构中定义了它?这是我处理表单中的 POST 数据并尝试将其保存到数据库的地方
app.post("/register", (req, res) => {
User.firstname = req.body.firstname;
User.surname = req.body.surname;
User.questions.q1.statement = req.body.q1;
User.questions.q1.spoof = strToBoolean(req.body.q1Spoof);
User.questions.q2.statement = req.body.q2;
User.questions.q2.spoof = strToBoolean(req.body.q2Spoof);
User.questions.q3.statement = req.body.q3;
User.questions.q3.spoof = strToBoolean(req.body.q3Spoof);
User.color.red = 255;
User.color.green = 255;
User.color.blue = 255;
User.save(err => console.log("Did not save to database: \n" + err));
});
strToBoolean 函数将字符串转换为布尔值 这应该很简单吧?但我还没有看到任何对我有帮助的答案。任何帮助表示赞赏。
解决方案
User
是一个模型。您需要基于此模型实例化一个文档并将您的变量分配给它:
app.post("/register", (req, res) => {
let user = new User()
user.firstname = req.body.firstname;
user.surname = req.body.surname;
user.questions.q1.statement = req.body.q1;
user.questions.q1.spoof = strToBoolean(req.body.q1Spoof);
user.questions.q2.statement = req.body.q2;
user.questions.q2.spoof = strToBoolean(req.body.q2Spoof);
user.questions.q3.statement = req.body.q3;
user.questions.q3.spoof = strToBoolean(req.body.q3Spoof);
user.color.red = 255;
user.color.green = 255;
user.color.blue = 255;
user.save(err => console.log("Did not save to database: \n" + err));
});
我不确定 Mongoose 在不存在默认值时如何处理嵌套对象模式,因此您可能需要实例化 questions 对象和 each q1
,q2
然后q3
才能分配给它们:
user.questions = {q1: {}, q2: {}, q3: {}};
user.questions.q1.statement = req.body.q1;
您还可以通过将对象传递给构造函数来创建文档:
let user = new User({
firstname: req.body.firstname,
surname: req.body.surname,
questions: {
q1: {
statement: req.body.q1,
spoof: strToBoolean(req.body.q1Spoof)
},
q2: {
statement: req.body.q2,
spoof: strToBoolean(req.body.q2Spoof)
},
q3: {
statement: req.body.q3,
spoof: strToBoolean(req.body.q3Spoof)
}
}
color: {
red: 255,
green: 255,
blue: 255
}
})
user.save(err => console.log("Did not save to database: \n" + err));
推荐阅读
- linux - 响应脚本中的 sudo 密码请求?
- node.js - 使用本地、纱线工作区依赖项和生产环境(例如 App Engine)环境变量构建?
- python - 在 Python 中自动转换为 32 位
- python - 检查所有 docker-compose up 服务是否成功启动
- java - Apache HttpClient:来自 HttpPost 的空响应实体
- java - 上一行完成后如何运行一组代码?
- python - Python 电子邮件包未在 Ubuntu 机器上导入
- javascript - 如何在 React JS 中使用带和不带参数的 axios 实例编写一个 GET api 调用
- python - 使用 Python 将原始电子邮件与回复分开
- git - 有没有办法在 macOS 中解决 git repo 中的长路径的“PATH_MAX”?