我有一个带有路由的app文件和另一个写有mongoose模式和集合模型对象的模块。应用代码是:
app.post("/saveNode", function(req, res) {
console.log(req.body.clientId)
if(req.body.hasOwnProperty("clientId")) {
defferedObject = nodeDbObject.returnCollectionObject(req.body);
}
}
从路由我调用mongoose model(returnCollectionObject)
对象的函数,它将在post调用中获得的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
中使用它的一些字段返回。在.done()
上使用defferedObject
但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
答案 0 :(得分:0)
使用异步调用,返回值将不起作用,您需要使用回调:
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"});
}
}