«Внутренняя ошибка сервера» api безсерверного узла - PullRequest
0 голосов
/ 30 сентября 2018

Я пишу API-сервер restless узла, и у меня мало функций, и сегодня я столкнулся с проблемой отправки ответов от лямбда-функции на шлюз API, мой обратный вызов не работает должным образом, что я делаю неправильно?

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

  client.on('connect', () => {
      console.log("connected to redis");
      callback(null, {
        statusCode: 200,
        headers: { 'Content-Type': 'text/plain' },
        body: 'connection established.',
      });
      return;
  });

};

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

У Lambda и NodeJS есть общая проблема, связанная с синхронизацией ... Я думаю, что здесь происходит то, что Lambda-функция завершается до того, как ваш ответ возвращается.Лямбда не ждет асинхронного ответа, поэтому большую часть времени не выполняет ответные события, поэтому никогда не попадает в ваш обратный вызов.

Попробуйте использовать Promise, который поддерживает код / ​​лямбду, пока асинхронный вызов не вернется и не будет вызван обратный вызов.

Это хорошая статья о том, как этого добиться:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

0 голосов
/ 30 сентября 2018

Хорошо, я сталкивался с Internal server error несколько раз раньше, и я предлагаю вам сделать это.

Сначала немного базовых знаний, которые вы должны иметь:

Когда выПри развертывании вашего приложения serverless, что происходит под капотом, это то, что serverless framework создает необходимые конфигурации и файл .zip (код и зависимости ваших функций лямбды) в папке .serverless.

Так что если вы 'Если вы пропустили необходимые зависимости в вашем package.json или забыли включить их в файл .zip, ваша лямбда вернет Internal server error.

И вам следует проверить, включили ли вы dependencies в dev-dependencies вpackage.json тоже.(Это предотвратит включение ваших необходимых модулей в файл .zip).

А во-вторых, если вы используете плагин serverless-webpack, вы должны включить эти строки в файл serverless.yaml.

custom:
  webpack:
    includeModules: true

Это сработало для моего случая.

Если вы не понимаете или не можете что-то спросить, не стесняйтесь делать это:)

...