Как вставить данные в связанные схемы мангуста?

Я пытаюсь создать конечную точку API в nodejs для вставки данных в mongodb. У меня есть две схемы мангусты, которые связаны друг с другом, поэтому я связываю эти две схемы, как показано ниже:

Схемы сообщений:

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

const PostSchema = mongoose.Schema({
    title: { type: String, trim: true, required: true},
    description: { type:String, required: true },
    created_at: { type: Date, default: Date.now },
    author: {type: Schema.ObjectId, ref: 'Author', required: true},
});

const Post = module.exports = mongoose.model('Post', PostSchema);

Схема авторов:

const mongoose = require('mongoose');

const AuthorSchema = mongoose.Schema({
    fullname: { type: String, trim: true, required: true},
    address: { type: String, required: true },
    phone: { type: Number, required: true },
    email: { type: String, required: true },
    created_at: { type: Date, default: Date.now }
});

const Author = module.exports = mongoose.model('Author', AuthorSchema);

Теперь я могу легко вставить данные для авторов схемы

Authors.js:

router.post('/', (req, res, next) => {
  let newAuthor = new Authors({
    fullname: req.body.fullname,
    address: req.body.address,
    phone: req.body.phone,
    email: req.body.email
  });

  newAuthor.save((err, user) => {
    if(err) {
      res.json({
        success: false,
        msg: "Failed to add author"
      });
    } else {
      res.json({
        success: true,
        msg: "Author added successfully"
      });
    }
  }); 
});

Но для сообщений я застрял здесь

posts.js:

router.post('/', (req, res) => {
    var newPost = new Posts({
        title: req.body.title,
        description: req.body.description,
        author: 
    })
})

главная проблема как получить автора??

2 ответа

Вы можете установить идентификатор автора в поле автора.

// you can set authorId in req.body and use that
router.post('/', (req, res) => {
    var newPost = new Posts({
        title: req.body.title,
        description: req.body.description,
        author: req.body.authorId
    })
});

ИЛИ вы можете установить идентификатор автора в пути и использовать req.params.authorId

// for that route from ui call should be like 
// var userId = 4654654545454
// $http.post('/'+userId)....

router.post('/:authorId', (req, res) => {
    var newPost = new Posts({
        title: req.body.title,
        description: req.body.description,
        author: req.params.authorId
    })
});

На странице, где вы разрешаете пользователям создавать сообщения, вам нужно передать идентификатор автора вместе с остальными деталями сообщения. Затем вы можете просто сослаться на идентификатор автора по тому, что вы выбрали для отправки (например, authorId).

Если вы используете сериализатор, который берет все значения из вашей формы и красиво упаковывает их, то вставьте скрытое поле ввода, в котором хранится идентификатор автора, чтобы вы также могли его захватить. Например:

<input type="hidden" name="authorId" value={user._id} />

В противном случае, если вы вручную упаковываете значения полей формы, просто добавьте идентификатор автора в качестве другого свойства в объекте ответа. Не уверен, что вы делаете для отправки запроса, но скажите, что вы использовали библиотеку axios для отправки ajax-сообщения на конечную точку, вы можете сделать это, чтобы легко добавить автора в ответ:

const title = document.getElementByNames("title")[0].value
const description = document.getElementByNames("description")[0].value
const author = document.getElementByNames("authorId")[0].value
axios.post("/posts", {title: title, description: description, author: authorId}).then(res => console.log(res))
Другие вопросы по тегам