Как запросить вложенные данные в модели mon goose - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь создать приложение Vue. js с бэкэндом стека MEVN и Vuex. Я настраиваю свой обработчик действий Vuex с помощью запроса GET, который запрашивает соответствующий маршрут Express GET для запроса данных, вложенных в Mon goose.

Имя пользователя передается в обработчик в качестве аргумента и добавляется к URL-адресу GET-запроса в качестве параметра:

  actions: {
    loadPosts: async (context, username) => {
      console.log(username)
      let uri = `http://localhost:4000/posts/currentuser?username=${username}`;
      const response = await axios.get(uri)
      context.commit('setPosts', response.data)
    }
  }

Соответствующий Express маршрут запрашивает activeUser.name, который представляет Вложенные данные в Mon goose Модель:

postRoutes.route('/currentuser').get(function (req, res) {
  let params = {},
    username = req.query.activeUser.name
    if (username) {
       params.username = username
    }
    Post.find(params, function(err, posts){
    if(err){
      res.json(err);
    }
    else {
      res.json(posts);
    }
  });
});

Ниже представлена ​​моя модель Mon goose, где activeUser.name представляет вложенные данные, запрашиваемые по маршруту Express:

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

let Post = new Schema({
  title: {
    type: String
  },
  body: {
    type: String,
  },
  activeUser: {
    name: {
      type: String
    }
  }
},{
    collection: 'posts'
});

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

Даже при такой настройке маршрут GET не отправляет ответ обратно обработчику действий. Я думал, что добавление username = req.query.activeUser.name в маршрут express будет правильным методом для запроса вложенных данных в Mon goose, но, видимо, нет. Любые рекомендации о том, как настроить вышеуказанный маршрут Express для запроса вложенных данных в модели Mon goose? Спасибо!

1 Ответ

1 голос
/ 07 февраля 2020

name находится внутри activeuser, поэтому вам необходимо создать переменную объекта params следующим образом:

postRoutes.route("/currentuser").get(function(req, res) {
  let params = {
    activeUser: {}
  };

  let username = req.query.activeUserName;

  if (username) {
    params.activeUser.name = username;
  }

  Post.find(params, function(err, posts) {
    if (err) {
      res.json(err);
    } else {
      res.json(posts);
    }
  });
});

Обратите внимание, что я также использовал activeUserName в качестве параметра запроса следующим образом: /currentuser?activeUserName=JS_is_awesome18

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...