0
我在loopbackjs
的上下文中使用此代码。 我想覆盖toJSON
方法以便返回不同的数据,具体取决于调用者是否是对象的所有者。javascript:使用原型函数的问题
Model.prototype.toJSON = function() {
var current = loopback.getCurrentContext();
var obj = getAllData(this);
if (!current) {
logger.error("Can't get current context in prototype.toJSON. Ignoring and returning 'safe' info");
return getSafeData(obj);
}
var token = current.get("accessToken");
if (!token) {
logger.debug("Current context has no token, may be anonymous");
return getSafeData(obj);
}
this.owner(function(err, owner) {
if (err) {
logger.error(err);
return getSafeData(obj);
}
if (token.userId == owner.id) {
logger.debug(obj); //here the log shows the correct object
return obj;
} else {
return getSafeData(obj);
}
});
}
var getAllData = function(obj) {
var json = {};
for (var p in obj.__data) {
json[p] = obj.__data[p];
}
return json;
}
var getSafeData = function(obj) {
var json = {};
for (var p in obj) {
if (Model.settings.protected.indexOf(p) >= 0) continue;
json[p] = obj[p];
}
return json;
}
我的问题是,当令牌不存在(anonoymous调用),代码不进入异步owner
功能,getSafeData(obj)
被调用,在前端返回完整的对象。
但是,无论何时调用this.owner
异步方法,在前端我都会得到“无内容”。但是,在返回之前,所有者检查之后,记录器调试输出会显示完整的对象。
我不知道为什么。任何想法? this
上的异步电话会成为问题吗?
写“无内容”的代码在哪里? – thefourtheye
是的,确切地说,调用'this.owner'函数的结果是什么'this.owner'函数返回=不是this.owner中调用的异步函数返回 –
@JaromandaX我不明白。不会在'this.owner()'里面的return语句,例如'return obj',也可以从'Model.prototye.toJSON'函数返回吗?如何让'Model.prototype.toJSON'返回'this.owner'调用的值? – faboolous