Mongoose&Express:来自子文档

时间:2019-05-23 00:27:52

标签: javascript express mongoose schema subdocument

我是Express / Mongoose和后端开发的新手。我正在尝试在架构中使用Mongoose子文档,并从表单向MLab数据库使用POST数据。

仅使用父模式时,我就成功地发布到数据库,但是当我尝试同时发布子文档中的数据时,出现了未定义的错误。如何正确发布子文档中的数据?

这是我的架构:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const bookSchema = new Schema({
  bookTitle: {
    type: String,
    required: true
  },
  author: {
    type: String,
    required: true
  },
  genre: {
    type: String
  }
});

const userSchema = new Schema({
  name: String,
  username: String,
  githubID: String,
  profileUrl: String,
  avatar: String,
  // I've tried this with bookSchema inside array brackets and also 
  //without brackets, neither works
  books: [bookSchema]
});

const User = mongoose.model('user', userSchema);

module.exports = User;

这是我尝试过帐到数据库的路线:

router.post('/', urlencodedParser, (req, res) => {
  console.log(req.body);

  const newUser = new User({
    name: req.body.name,
    username: req.body.username,
    githubID: req.body.githubID,
    profileUrl: req.body.profileUrl,
    avatar: req.body.avatar,
    books: {
      // All of these nested objects in the subdocument are undefined. 
      //How do I properly access the subdocument objects?
      bookTitle: req.body.books.bookTitle,
      author: req.body.books.author,
      genre: req.body.books.genre
    }
  });

  newUser.save()
    .then(data => {
      res.json(data)
    })
    .catch(err => {
      res.send("Error posting to DB")
    });

});

1 个答案:

答案 0 :(得分:0)

弄清楚了。我没有使用点符号正确访问值。

const authorizeEpic: Epic<ActionTypes, ActionTypes, RootState> = action$ =>
  action$.pipe(
    filter(isActionOf(actions.attemptLogin.request)),
    switchMap(async val => {
      if (!val.payload) {
        try {
          const token: Auth.Token = JSON.parse(
            localStorage.getItem(LOCAL_STORAGE_KEY) || ""
          );
          if (!token) {
            throw new Error();
          }
          return actions.attemptLogin.success({
            token
          });
        } catch (e) {
          return actions.attemptLogin.failure({
            error: {
              title: "Unable to decode JWT"
            }
          });
        }
      }

      const resp = await Auth.passwordGrant(
        {
          email: val.payload.email,
          password: val.payload.password,
          totp_passcode: ""
        },
        {
          url: "localhost:8088",
          noVersion: true,
          useHttp: true
        }
      );

      if (resp.ok) {
        return [
          actions.attemptLogin.success({
            token: resp.value
          })
          // EMIT action 2, etc...
        ];
      }

      return actions.attemptLogin.failure(resp);
    })
  );

无需访问books对象内部的books: { // All of these nested objects in the subdocument are undefined. //How do I properly access the subdocument objects? bookTitle: req.body.books.bookTitle, author: req.body.books.author, genre: req.body.books.genre } .books应该是req.body.books.bookTitle,依此类推。保留此帖子,以免对他人有帮助。