首页 > 解决方案 > nodejs express mongoose - 试图将列表的长度作为模型中的虚拟参数作为响应

问题描述

在模型中使用虚拟参数,如何计算模型参数之一中列表的长度,并作为 api 调用的响应发回?

.... 服务器文件:server.js ....

//GET an ARRAY of users (and total counter of users) data via api
    app.get('/api/v1/users', (req,res) => {
        Userslist.find((err, userslists) => {
            if (err){
                res.send(err);
            }else{
                res.send(userslists);
            }
        });
    });

....模型文件:Users.js ....

var userslistSchema = new Schema({
    items: {type: mongoose.Schema.Types.ObjectId, ref: 'ArrayOfUser'},
},{
    toObject: {virtuals: true}, toJSON: {virtuals: true}
})

userslistSchema.virtual('total')
    .get(function() {return this.items.length})

module.exports = mongoose.model('Userslist', userslistSchema)

标签: node.jsapiexpressmongoose

解决方案


两个问题:如果items应该是一个Array应该定义如下。

var userslistSchema = new Schema({
    items: [{type: mongoose.Schema.Types.ObjectId, ref: 'ArrayOfUser'}],
},{
    toObject: {virtuals: true}, toJSON: {virtuals: true}
})

其次在定义虚拟总量时。不处理没有项目的情况。适当地处理它下面的示例代码。PS - 这只是一个理解示例(可以更好地处理)

userslistSchema.virtual('total')
    .get(function() {return (this.items && this.items.length) ? this.items.length : 0})

推荐阅读