【问题标题】:Return response from a module function node.js从模块函数 node.js 返回响应
【发布时间】:2014-05-07 23:38:06
【问题描述】:

我有一个包含路由的应用程序文件和另一个编写的模块,该模块具有猫鼬模式和集合的模型对象。应用代码为:

app.post("/saveNode", function(req, res) {
    console.log(req.body.clientId)
    if(req.body.hasOwnProperty("clientId")) {
        defferedObject = nodeDbObject.returnCollectionObject(req.body);
    }
}

从路由中我调用了mongoosemodel(returnCollectionObject)对象的函数,它将在调用后获得的body保存到数据库中。这个函数是写在模块中的。相同的代码如下:

exports.returnCollectionObject = function(body) {
    var collection = "refresh_hierarchy";
    var nodeModelObject = mongoose.model(collection, folderSchema);
    return nodeModelObject.create(body, function(err, resp) {
        if(err == null) {
            return resp;
        }
    });
};

我正在从我为帖子编写的路线中调用此函数。我希望从我的路由内部从这个function(resp) 返回的对象,以便我可以使用它的一些字段在response 中返回。尝试在defferedObject 上使用.done(),但return resp 不返回任何内容。我做对了吗?这是完成功能的代码。

app.post("/saveNode", function(req, res) {
    if(req.body.hasOwnProperty("clientId")) {
        defferedObject = nodeDbObject.returnCollectionObject(req.body);
        defferedObject.done(function(resp) {
            res.send({"data": resp.uniqueNodeId, "error": err});
            res.end();
        });
    }
}

这只是我编写节点服务的第一次尝试。任何人都可以帮我解决这个问题。可以这样做吗?我得到的错误如下。

TypeError: Cannot call method 'done' of undefined

【问题讨论】:

  • 你没有从你的函数中返回一个承诺。事实上,你没有返回任何东西。
  • 也尝试了返回。它返回一个promise对象并说它有两个方法完成和错误。但是当我写完整的东西时它不会执行。你能说出为什么会这样吗?

标签: javascript node.js express mongoose


【解决方案1】:

使用异步调用,返回值不起作用,您需要使用回调:

exports.returnCollectionObject = function(body, callback) {
    var collection = "refresh_hierarchy";
    var nodeModelObject = mongoose.model(collection, folderSchema);
    nodeModelObject.create(body, function(err, resp) {
         callback(err, resp);  // err might be null or some error, check in caller
    });
};

在您的路线中,执行以下操作:

var dbObj = require('./nodeDbObject');  // assume you name file
                                        // nodeDbObject.js which
                                        // contains 
                                        // returnCollectionObject()
app.post("/saveNode", function(req, res) {
    if(req.body.hasOwnProperty("clientId")) {

        dbObj.returnCollectionObject(req.body, function(err, result) {
            if (err) {
                res.send({error: err});
            } else {
                res.send({data: result});
            }
        });
    } else {
        res.send({error: "no clientId"});
    }
}

【讨论】:

    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2015-10-13
    • 2023-04-01
    • 1970-01-01
    • 2017-08-20
    • 2018-01-28
    相关资源
    最近更新 更多