обещание удаления токена node.js - PullRequest
0 голосов
/ 21 января 2019

У меня есть маршрут удаления для моего 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);
    });
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...