Ошибка обратного вызова в файле node.js, запущенном на AWS Lambda

У меня есть этот код в node.js (nodejs10.x) работает в AWS Lambda.

module.exports.register = (event, context, callback) => {

  // Body es un json por lo que hay que deserializarlo
  let body = JSON.parse(event.body);

  let rules = {
    'name': 'required|min:3',
    'family_name': 'required|min:3',
    'email': 'required|email',
    'curp': 'required|size:18',
    'modules': 'required',
    'password': 'required'
  };

  let validation = new validator(body, rules);

  // If errors this validation exits using the callback
  if(validation.fails()){
    console.log(validation.errors.all())
    const response = {
      statusCode: 422,
      body: JSON.stringify(validation.errors.all())
    };
    callback(null, response);
  }

  // just for testing
  const isModulesValid = false;


  if(!isModulesValid){
    console.log('Modules validation failed. ')
    const response = {
      statusCode: 422,
      body: JSON.stringify({'modules': 'Invalid modules string. '})
    };
    callback(null, response);
    // However this is not working
  }

  // and even if there is an error this code is executed
  console.log('XXXX');

Я тестирую его локально с помощью кода, подобного этому.

// Callback
let callback = function(err, result) {
  if (err)
    console.log(err);
  if (result)
    console.log(result);
  // Terminate execution once done
  process.exit(0);
}

// lambda.generateToken(event, context, callback);
lambda.register(event, context, callback);

Локально, если isModulesValid = false, код завершается, и console.log ('XXXX') не выполняется. Однако при запуске его в AWS Lambda, даже если проверка не удалась, код продолжает выполняться и выполняется console.log ().

Я не могу понять, что происходит. Помоги пожалуйста?

Всего 2 ответа


Локально вы используете обратный вызов, который имеет process.exit(0); который завершает процесс и, следовательно, следующая строка не выполняется. Обратный вызов не означает, что код впоследствии не будет выполнен. поток кода продолжается и после этого. Все зависит от того, что у вас есть в вашем обратном вызове.


Этот кусок кода решил проблему:

if(!isModulesValid){
    console.log('Modules validation failed. ')
    const response = {
      statusCode: 422,
      body: JSON.stringify({'modules': 'Invalid modules string. '})
    };
    // Return callback explcitly
    return callback(null, response);
  }

Очевидно, это связано с тем, как AWS Lambda обрабатывает очередь задач. Я нашел хорошее объяснение здесь: https://blog.danillouz.dev/aws-lambda-and-the-nodejs-event-loop/


Есть идеи?

10000