首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:无法读取未定义的属性“q1”

TypeError:无法读取未定义的属性“q1”
EN

Stack Overflow用户
提问于 2018-05-09 14:25:13
回答 1查看 137关注 0票数 0

我设计了我的猫鼬模式,里面有一个由对象组成的结构,如下所示。以下是User.js:

代码语言:javascript
复制
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数据并尝试将其保存到DB的地方。

代码语言:javascript
复制
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函数将字符串转换为布尔值,这应该很简单吗?但我还没看到任何对我有帮助的答案。任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 14:40:09

User是一个模型。您需要基于这个模型实例化一个文档,并将变量分配给它:

代码语言:javascript
复制
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如何处理嵌套对象模式,因此您可能需要实例化问题对象以及每个q1q2q3,然后才能将它们分配给它们:

代码语言:javascript
复制
   user.questions = {q1: {}, q2: {}, q3: {}};
   user.questions.q1.statement = req.body.q1;

还可以通过将对象传递给构造函数来创建文档:

代码语言:javascript
复制
   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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50255810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档