user.login в loopback 3 не возвращает ответ - PullRequest
0 голосов
/ 26 февраля 2020

Я создал метод удаленного входа с использованием метода loopback user.login. Функциональность работает хорошо, но я не могу отправить ответ. Метод завершает себя перед отправкой ответа. Вот мой код:

user. js

async function findUserRole(userId) {
  return await userRole.find({
    where: {
      user_id: userId
    },
    include: {
      relation: 'role'
    },
  }).then(async function (res) {
    let isProvider = false;
    let isCustomer = false;
    let userResponse = JSON.parse(JSON.stringify(res));
    for (let index = 0; index < userResponse.length; index++) {
      if (userResponse[index].role.role_code === "CST") {
        isCustomer = true;
      } else if (userResponse[index].role.role_code === "PVI") {
        isProvider = true;
      }
    }

    if (isCustomer && isProvider) {
      console.log("here");
      return {code: 3, success: true, error: false, response: userObject, accessToken: accessToken};
    } else {
      if (isCustomer) {
        return {code: 1, success: true, error: false, response: userObject, accessToken: accessToken};
      } else if (isProvider) {
        return {code: 2, success: true, error: false, response: userObject, accessToken: accessToken};
      } else {
        return await user.logout(accessToken, function (err) {
          if (err)
            return {success: false, error: true, response: "No role found"};
        });
      }
    }

  }).catch(function (errorResponse) {
    return errorResponse.message;
  });
}
}; 

user.remoteMethod(
'loginUser', {
  http: {
    path: '/login-user',
    verb: 'post',
  },
  returns: {
    arg: 'Result',
    type: 'string',
  },
  accepts: [
    {arg: 'loginObject', type: 'object', http: {source: 'body'}}
  ]
}
);

Я получаю правильные результаты, когда я консоль данных через поток, но всегда получаю пустой ответ, куда бы я ни отправил его из метода User.login.

1 Ответ

0 голосов
/ 09 марта 2020

Вы не должны использовать asyn c -await в родительском (основном) удаленном методе вместе с 'then', но используйте 'callback' вместе с объектом ошибки или результата.

Users.loginUser() = function (loginObject, callback) {
userRole.find({
  where: {
    user_id: loginObject.userId
  },
  include: {
    relation: 'role'
  },
}).then(async function (res) {
  let isProvider = false;
  let isCustomer = false;
  let userResponse = JSON.parse(JSON.stringify(res));
  for (let index = 0; index < userResponse.length; index++) {
    if (userResponse[index].role.role_code === "CST") {
      isCustomer = true;
    } else if (userResponse[index].role.role_code === "PVI") {
      isProvider = true;
    }
  }
  if (isCustomer && isProvider) {
    console.log("here");
    return callback(null, {
      code: 3,
      success: true,
      error: false,
      response: userObject,
      accessToken: accessToken
    });
  } else {
    if (isCustomer) {
      return callback(null, {
        code: 1,
        success: true,
        error: false,
        response: userObject,
        accessToken: accessToken
      });
    } else if (isProvider) {
      return callback(null, {
        code: 2,
        success: true,
        error: false,
        response: userObject,
        accessToken: accessToken
      });
    } else {
      return await user.logout(accessToken, function (err) {
        if (err)
          return callback({
            success: false,
            error: true,
            response: "No role found"
          });
      });
    }
  }
})

};

...