Я пытаюсь построить REST API с помощью Typescript, Koa и Sequelize.Это довольно просто и имеет только app.ts
в качестве точки входа, один контроллер и одну модель.
Я получаю сообщение об ошибке, когда пытаюсь вернуть Promise (данные из БД) из действия:
"TypeError: конструктор класса Book не может быть вызван без 'new' \ n в _loop_1 (/production/data/src/TransformOperationExecutor.ts:124:47)\n в TransformOperationExecutor.transform (/ production / data / node_modules)/class-transformer/TransformOperationExecutor.js:178:17)\n в _loop_1 (/production/data/src/TransformOperationExecutor.ts:167:43)\n в TransformOperationExecutor.transform (/ production / data / node_modules / class-transformer)/TransformOperationExecutor.js:178:17)\n at _loop_1 (/production/data/src/TransformOperationExecutor.ts:167:43)\n at TransformOperationExecutor.transform (/production/data/node_modules/class-transformer/Transformjsecec: 178: 17) \ n в _loop_1 (/production/data/src/TransformOperationExecutor.ts:167:43)\n в TransformOperationExecutor.transform (/ production / data/node_modules/class-transformer/TransformOperationExecutor.js:178:17)\n at _loop_1 (/production/data/src/TransformOperationExecutor.ts:167:43)\n в TransformOperationExecutor.transform (/ production / data / node_modules / class-transformer / TransformOperationExecutor.js: 178: 17) \ n в /production/data/src/TransformOperationExecutor.ts:43:40\n в Array.forEach () \ n в TransformOperationExecutor.transform (/ production / data / src /TransformOperationExecutor.ts: 40: 30) \ n в ClassTransformer.classToPlain (/production/data/src/ClassTransformer.ts:21:25)\n в Object.classToPlain (/production/data/src/index.ts:17:29) \ n на KoaDriver.BaseDriver.transformResult (/production/data/src/driver/BaseDriver.ts:143:22)\n на KoaDriver.handleSuccess (/production/data/src/driver/koa/KoaDriver.ts:222: 23) \ n в /production/data/src/RoutingControllers.ts:161:45 "Blockquote
Вот мой tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es2016",
"noImplicitAny": false,
"sourceMap": true,
"outDir": "dist",
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"exclude": [
"node_modules"
]
}
Вот мойpackage.json
{
"name": "name",
"version": "1.0.0",
"description": "description",
"scripts": {
"dev": "NODE_ENV=development nodemon dist/app.js"
},
"keywords": [
"node"
],
"author": "author",
"license": "ISC",
"dependencies": {
"reflect-metadata": "^0.1.12",
"koa": "^2.6.2",
"koa-bodyparser": "^4.2.1",
"koa-router": "^7.4.0",
"koa-multer": "^1.0.2",
"koa-static": "^5.0.0",
"routing-controllers": "^0.7.7",
"lodash": "^4.17.11",
"mysql2": "^1.6.4",
"sequelize": "^4.39.0",
"sequelize-typescript": "^0.6.6"
},
"devDependencies": {
"@types/koa": "^2.0.46",
"@types/koa-bodyparser": "^5.0.1",
"@types/koa-router": "^7.0.32",
"@types/koa-static": "^4.0.0",
"@types/lodash": "^4.14.116",
"@types/sequelize": "^4.27.26",
"nodemon": "^1.11.0",
"ts-node": "^7.0.1",
"typescript": "^3.1.1"
}
}
Также у меня есть приложение nodemon.json
{
"watch": ["src"],
"ext": "ts",
"exec": "ts-node ./src/app.ts"
}
.ts
import "reflect-metadata";
import {createKoaServer} from "routing-controllers";
import {Sequelize} from 'sequelize-typescript';
const sequelize = new Sequelize({
host: '172.18.0.11',
database: 'notes',
dialect: 'mysql',
username: 'username',
password: 'root',
modelPaths: [__dirname + '/models']
});
const port = 20000;
createKoaServer({
controllers: [__dirname + "/controllers/*"]
}).listen(port);
console.log("Server running on port " + port);
В каталоге models
У меня есть файл Book.ts
import {Table, Column, Model, HasMany} from 'sequelize-typescript';
@Table({tableName: 'Books'})
export class Book extends Model<Book> {
@Column
title: string;
@Column
author: string;
}
И, наконец, в каталоге controllers
У меня есть файл BookController.ts
import {Get, JsonController, Post, Patch, Param, State, Delete} from "routing-controllers";
import {Book} from "../models/Book";
@JsonController("/api")
export class BookController {
@Get("/books")
getAll() {
return Book.findAll();
}
}
Здесь, в BookController.ts
, я пытаюсь вернуть обещание (как я прочитал в документации ) и получил ошибку.Итак, что я сделал не так?