ServerLess дает пустое исключение с моделью sequelize-typcript? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь заставить Sequelize работать с моим проектом aws-lambda. Тем не менее, серверная структура возвращает пустое исключение всякий раз, когда я пытаюсь использовать модель, и я не понимаю, почему. Ответ без сервера - просто пара красных скобок ('{}') ...

Я сварил его до образца:

import { APIGatewayEvent, Callback, Context, Handler } from 'aws-lambda';
import { Column, Model, PrimaryKey, Sequelize , Table } from 'sequelize-typescript';

@Table
class SomeModel extends Model<SomeModel> {
  @Column
  @PrimaryKey
  public id: number;
}

export const handler: Handler = (event: APIGatewayEvent, context: Context, cb: Callback) => {
  const sequelize = new Sequelize({
    host: '...',
    database: '...',
    dialect: 'mssql',
    username: '...',
    password: '...',
  });

  sequelize.addModels([SomeModel]);

  sequelize.authenticate()
    .then(() => {
      console.log('Connection has been established successfully.');

      const dbversion = sequelize.options.databaseVersion;
      const response = {
        statusCode: 200,
        body: JSON.stringify('DB version: ' + dbversion),
      };
      cb(null, response);
    })
    .catch(err => {
      console.error('Unable to connect to the database:', err);
    });
};

Если я запускаю 'serverless invoke local --verbose --function dbtest', я получаю:

{}

  Error --------------------------------------------------

  Exception encountered when loading C:\Users\Thomas\Documents\GitHub\Test\.webpack\service\functions\dbtest\get-dbtest

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Stack Trace --------------------------------------------

Error: Exception encountered when loading C:\Users\Thomas\Documents\GitHub\Test\.webpack\service\functions\dbtest\get-dbtest
    at AwsInvokeLocal.invokeLocalNodeJs (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\invokeLocal\index.js:307:13)
    at AwsInvokeLocal.invokeLocal (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\invokeLocal\index.js:131:19)
From previous event:
    at Object.invoke:local:invoke [as hook] (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\plugins\aws\invokeLocal\index.js:27:10)
    at BbPromise.reduce (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:391:55)
From previous event:
    at PluginManager.invoke (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:391:22)
    at PluginManager.run (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\classes\PluginManager.js:422:17)
    at variables.populateService.then.then (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\Serverless.js:157:33)
    at runCallback (timers.js:794:20)
    at tryOnImmediate (timers.js:752:5)
    at processImmediate [as _immediateCallback] (timers.js:729:5)
From previous event:
    at Serverless.run (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\lib\Serverless.js:144:8)
    at serverless.init.then (C:\Users\Thomas\AppData\Roaming\npm\node_modules\serverless\bin\serverless:44:28)
    at <anonymous>

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information -----------------------------
     OS:                     win32
     Node Version:           8.10.0
     Serverless Version:     1.35.1

Однако, если я удалю / закомментирую класс модели, включая addModels () и все связанные импорты ... тогда он будет работать как положено! В этом случае я получаю правильную версию базы данных обратно в ответ ...

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

Идеи

ОБНОВЛЕНИЕ - Обходной путь найден?

Я думаю, что нашел, где это терпит неудачу ... хотя я все еще не понимаю, почему ...

Если я изменю порядок декораторов @Column и @PrimaryKey на модели, тогда все будет работать как положено ... поэтому первичный ключ должен быть первым, иначе он выдаст пустое исключение ... но я бы хотел знать почему?

ОБНОВЛЕНИЕ 2 Кажется, что sequelize-typcript должен быть в состоянии сообщить мне об этом вроде ошибок ... почему это не отображается при запуске команды invoke? https://github.com/RobinBuschmann/sequelize-typescript/blob/93330a700b11e1eaf7fdc53b05fe0b3d92eeb22b/lib/services/models.ts#L115-L118

...