我正在尝试使用MEVN堆栈后端和Vuex构建Vue.js应用。我正在使用GET请求配置我的Vuex动作处理程序,该请求会提示相应的Express GET路由以查询嵌套在Mongoose中的数据。
用户名作为参数传递给处理程序,并作为参数附加到GET请求URL:
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
,代表猫鼬模型中的嵌套数据:
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);
}
});
});
下面是我的猫鼬模型,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
是查询Mongoose中嵌套数据的正确方法,但显然不是。关于如何配置上述Express路由以查询Mongoose模型中的嵌套数据的任何建议?谢谢!
答案 0 :(得分:1)
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