Я пытаюсь заставить 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