0
2 개의 원격 메소드가 동일한 루프백 모델에서 작동하지만 하나만 API 탐색기에서 작동하게하려고합니다. 내가 그 중 하나의 코드를 주석 처리/삭제하면 다른 코드가 완벽하게 작동합니다. 여기에 내가 그것을 이루려고 노력하는 방법은 다음과 같습니다.루프백, 동일한 모델에서 2 개의 원격 메소드를 선언했지만 API 탐색기에서만 사용할 수 있습니다.
module.exports = function(Usrs) {
var db = server.dataSources.wifiMongo;
db.connect(function(err, db) {
Usrs.authMethod = function(cb) {
db.collection('users', function(err, collection) {
if (err)
return console.log('Error al encontrar la collección, err = ', err);
collection.aggregate([{
"$group": {
_id: "$strategy",
count: {
$sum: 1
}
}
}, {
$project: {
tmp: {
label: '$_id',
value: '$count'
}
}
}, {
$group: {
_id: 'methods',
data: {
$addToSet: '$tmp'
}
}
}], function(err, methods) {
if (err) {
console.log('err = ' + err);
} else {
methods[0].data.forEach(function(method) {
method.color = randomColor({
luminosity: 'bright'
});
});
cb(null, methods[0].data);
}
});
});
};
});
Usrs.remoteMethod('authMethod', {
http: {
path: '/analytics/authMethod',
verb: 'get'
},
returns: {
arg: 'authMethod',
type: 'Object'
}
});
//-------------------------------------------------------------------------//
db.connect(function(err, db) {
if (err) return console.log('error al conectar wifiMongo, err = ', err);
Usrs.devices = function(cb) {
db.collection('clients', function(err, collection) {
if (err)
return console.log('Error al encontrar la collección, err = ', err);
collection.aggregate([{
"$group": {
_id: "$os",
count: {
$sum: 1
}
}
}], function(err, client) {
if (err) {
console.log(err);
} else {
var output = client.reduce(function(a, b) {
var match = b._id ? b._id.match(/(Mac|Windows|Android|iOS)/) : null;
match = match ? match[0] : 'Others';
a[match] = (a[match] || 0) + b.count;
return a;
}, {});
output = Object.keys(output).map(function(k) {
return {
label: k,
value: output[k],
color: randomColor({
luminosity: 'bright'
})
};
});
cb(null, output);
}
});
});
};
});
Usrs.remoteMethod('devices', {
http: {
path: '/analytics/devices',
verb: 'get'
},
returns: {
arg: 'devices',
type: 'Object'
}
});
};
첫 번째 것은 오류없이 실행됩니다. 다른 하나는 내부 서버 오류가 발생합니다.
는 다음과 같은 로그 : 심지어 다른 모델에 배치하려고했습니다
Unhandled error for request GET /usrs/analytics/devices: TypeError: Cannot read property 'collection' of undefined
at Function.Usrs.devices (/home/ubuntu/loopback/common/models/usrs.js:72:6)
at SharedMethod.invoke (/home/ubuntu/loopback/node_modules/strong-remoting/lib/shared-method.js:262:25)
at HttpContext.invoke (/home/ubuntu/loopback/node_modules/strong-remoting/lib/http-context.js:295:12)
at phaseInvoke (/home/ubuntu/loopback/node_modules/strong-remoting/lib/remote-objects.js:647:9)
at runHandler (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/lib/phase.js:135:5)
at iterate (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/node_modules/async/lib/async.js:146:13)
at Object.async.eachSeries (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/node_modules/async/lib/async.js:162:9)
at runHandlers (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/lib/phase.js:144:13)
at iterate (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/node_modules/async/lib/async.js:146:13)
at /home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/node_modules/async/lib/async.js:157:25
at /home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/node_modules/async/lib/async.js:154:25
at execStack (/home/ubuntu/loopback/node_modules/strong-remoting/lib/remote-objects.js:492:7)
at RemoteObjects.execHooks (/home/ubuntu/loopback/node_modules/strong-remoting/lib/remote-objects.js:496:10)
at phaseBeforeInvoke (/home/ubuntu/loopback/node_modules/strong-remoting/lib/remote-objects.js:643:10)
at runHandler (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/lib/phase.js:135:5)
at iterate (/home/ubuntu/loopback/node_modules/strong-remoting/node_modules/loopback-phase/node_modules/async/lib/async.js:146:13)
,하지만 같은 오류가 나타납니다.