首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Koa控制器错误动作的返回承诺

Koa控制器错误动作的返回承诺
EN

Stack Overflow用户
提问于 2018-11-18 18:44:05
回答 2查看 481关注 0票数 0

我正在尝试用类型记录、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

代码语言:javascript
复制
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2016",
    "noImplicitAny": false,
    "sourceMap": true,
    "outDir": "dist",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}

这是我的package.json

代码语言:javascript
复制
{
  "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

代码语言:javascript
复制
{
  "watch": ["src"],
  "ext": "ts",
  "exec": "ts-node ./src/app.ts"
}

App.ts

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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中,我尝试返回诺言(正如我在文档中看到的那样)并得到错误。那么,我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2018-11-18 20:01:46

答案在错误信息中。您必须使用new创建Book类的实例

代码语言:javascript
复制
const book = new Book();
票数 0
EN

Stack Overflow用户

发布于 2018-11-19 23:52:54

代码语言:javascript
复制
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‘关键字调用⨯函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53364306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档