Mongoose .findOne不作为内部函数调用

时间:2015-03-01 21:38:20

标签: node.js mongodb mongoose

将此作为网址:

  

' API /载体标签/名称/ myTagName'

此功能正常运行:

    getByName: function (req, res) {
    model.Shared_SupportTag.findOne({name: req.params.name}).exec(function (err, results) {
        if (err) {
            return res.status(400).send({
                message: errMsg.Util_ErrorMsg.getErrorMessage(err)
            });
        }
        res.send(results);
    })
}

但是当我尝试从节点服务器中调用类似的函数时:

supportDoc.category = GetById(item.category);

function GetById(name){
    model.Shared_SupportTag.findOne({name: name}).exec(function(err, result){
        if(err){
            console.log(err)
        }else{
            console.log(result);
        }
    })
}

该函数不执行,错误捕获,intellisense也没有显示:

 err= Reference error; err is not defined

 result = Reference error; result is not defined

我想要完成的只是来自服务器内部的函数调用,而不是通过URL。

这里有解决方案吗?提前致谢

2 个答案:

答案 0 :(得分:0)

对于findOne()方法,正响应(sans error)将保持一个猫鼬对象或null。

如果仅使用find()发送了相同的查询,则结果将是一个空数组。

function GetById(name){
    model.Shared_SupportTag.findOne({name: name}).exec(function(err, result){
        if(err){
            console.log(err)
        }else{
            if (result) console.log(result); //Check whether object exists.
            else console.log('Not found!');
        }
    })
}

答案 1 :(得分:0)

<强>解决:

  model.Shared_SupportDoc.find({}).exec(function (err, collection) {
                var supportDocs = require('../../data/_seed/support/supportDocs.json');
                if (collection.length === 0) {
                    supportDocs.forEach(function (item) {
                        var supportDoc = new model.Shared_SupportDoc;
                        supportDoc.title = item.title;
                        supportDoc.created = item.date;
                        supportDoc.icon = item.icon;
                        supportDoc.likeCount = item.likeCount || 7;

  ----->   // requires callback - ie asynchronous
            GetByName(item.category, function(tagId) {
                supportDoc.categoryId = tagId;

      ----->   // must put save in the callback
                supportDoc.save(function (err) {
                    if (err) {
                        console.log(supportDoc.categoryId)
                        console.log('Error: ' + err);
                    } else {
                        console.log('Support Doc Seed Complete');
                    }
                });
            });
        })
    }
});}


 function GetByName(name, next) {
   model.Shared_SupportTag.findOne({name : name}).exec(function (err, result) {
    if (!result) {
        console.log('Not Found');
        next();
    } else {
        console.log(result._id);
        next(result._id);
    }
});}