我正在尝试用类型记录、Koa和Sequelize构建REST。它非常简单,只有app.ts作为入口点、一个控制器和一个模型。
当我试图从一个操作返回一个承诺(来自DB的数据)时,我得到了一个错误:
“(/production/data/src/TransformOperationExecutor.ts:124:47)\n :没有‘new’类构造函数簿就不能被调用,在_loop_1、at 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/TransformOperationExecutor.js:178:17)\上(/production/data/src/TransformOperationExecutor.ts:167:43)\n at 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/TransformOperationExecutor.js:178:17)\n at _loop_1 (/production/data/src )在(/production/data/node_modules/class-transformer/TransformOperationExecutor.js:178:17)\n at /production/data/src/TransformOperationExecutor.ts:43:40\n at Array.forEach ()在TransformOperationExecutor.transform (/production/data/src/TransformOperationExecutor.ts:40:30)\n at ClassTransformer.classToPlain (/production/data/src/ClassTransformer.ts:21:25)\n at Object.classToPlain (/生产/数据/src/index.ts:17:29\n在(/production/data/src/driver/BaseDriver.ts:143:22)\n at KoaDriver.handleSuccess (/production/data/src/driver/koa/KoaDriver.ts:222:23)\n at /production/data/src/RoutingControllers.ts:161:45“区块报价
这是我的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"
}App.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中,我尝试返回诺言(正如我在文档中看到的那样)并得到错误。那么,我做错了什么?
发布于 2018-11-18 20:01:46
答案在错误信息中。您必须使用new创建Book类的实例
const book = new Book();发布于 2018-11-19 23:52:54
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 new Book.findAll();
}
}不能处理错误:
TSError:无法编译TypeScript: src/ called /BookController.ts(8,16):error TS2350:只能用'new‘关键字调用⨯函数。
https://stackoverflow.com/questions/53364306
复制相似问题