У меня есть маршрут удаления для моего API, который удаляет токены, хранящиеся в нашей mongodb. В настоящее время я пишу проверку, чтобы убедиться, что токен не связан с другим объектом, прежде чем он будет обработан для удаления.
function checkTokenIsNotUsed(req) {
console.log('TEST ' + req.params.token);
objectDB.findObject('artefact', {"data.token": req.params.token})
.then(function(result) {
console.log('findObject result' + result);
if (isDefined(result)) {
console.log('Artefact Exists');
serverError(res, 'Cannot delete token as it is associated with an artefact');
} else {
console.log('Token not being used by an artefact, okay for deletion');
};
})
.catch(function(err){
console.error('Token CHECK DELETE error: '+err.message);
serverError(res, 'err.message');
});
return(result)
};
//
// Token deletion
//
app.delete('/:token', function(req, res, next) {
checkTokenIsNotUsed(req)
.then(function(results){
return tokenModel.findOne({token: req.params.token});
})
В существующем состоянии, когда я нажимаю на маршрут, вызывается функция checkTokenIsNotUsed
, которая печатает 'TEST + <token>'
на консоли, а затем выдает cannot read property 'then' of undefined
.
Я проверил свой запрос в оболочке mongo независимо от используемого интерфейса платформы, и запрос работает, как и ожидалось. Маршрут API также работает, как и ожидалось, без активной функции checkTokenIsUsed
.
Есть идеи, почему обещание objectdb.findObject()
не дает результата? Он предназначен для возврата списка объектов или вообще ничего и делает, как ожидается, в других местах в этом файле.
- findObject
правильно экспортируется + импортируется из соответствующего местоположения
- запрос правильно структурирован и работает в оболочке mongo.
- сам токен печатается непосредственно перед запуском этой функции, поэтому checkTokenIsNotUsed
вызывается и выполняется.
-Мне действительно все равно, что условное просто выводит на консоль в данный момент, так как моя цель сейчас - просто войти в эту часть функции.
ИЗМЕНИТЬ добавлено
findObject = function(objType, query, options) {
return new Promise(function(resolve,reject) {
var populateOptions;
var findQuery = {};
var findOptions = {
sort: 'metaData.createTS',
page: 1,
limit: 50
};
var objectDef = getObjectDef(objType);
if (!isDefined(objectDef)) return resolve(null);
// Make sure query exists and has objType set
if (isDefined(query)) findQuery = query;
if (!isDefined(findQuery.objType)) findQuery.objType = objType;
if (isDefined(options)) {
if (isDefined(options.sort)) findOptions.sort = options.sort;
if (isDefined(options.page)) findOptions.page = toInt(options.page);
if (isDefined(options.limit)) findOptions.limit = toInt(options.limit);
}
if (isDefined(objectDef.populate)) populateOptions = objectDef.populate;
else populateOptions = "";
objectDef.model.find(findQuery, null, findOptions)
.populate(populateOptions)
.exec(function(error, list) {
if (error) reject(error);
else resolve(list);
});
});
};