在多个文件中拆分 Koa 路由器和控制器

Split Koa router and controller in multiple files

我正在尝试拆分我的应用程序。 不幸的是,调用控制器不起作用。一旦我注释掉控制器和 post 方法,它就会调用服务器。

route/image.ts

const imageController = require('../controllers/imageController.ts')

module.exports = ({ router }) => {
  router
    .get('/image', ctx => {
      ctx.body = 'Image'
    })
    .post('/image', imageController.newImage)
}

controller/imageController.ts

import { BaseContext } from 'koa'

export default class imageController {
  static newImage = (ctx: BaseContext) => {
    // return OK status code
    ctx.status = 200
    ctx.body = 'Test'
  }
}

错误

Unexpected token {                                                                                                                                                                                                                                        11:44:42

  (function (exports, require, module, __filename, __dirname) { import { BaseContext } from 'koa'
  ^

  SyntaxError: Unexpected token {
  at new Script (vm.js:84:7)
  at createScript (vm.js:264:10)
  at Object.runInThisContext (vm.js:312:10)
  at Module._compile (internal/modules/cjs/loader.js:684:28)
  at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
  at Module.load (internal/modules/cjs/loader.js:620:32)
  at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
  at Function.Module._load (internal/modules/cjs/loader.js:552:3)
  at Module.require (internal/modules/cjs/loader.js:657:17)
  at require (internal/modules/cjs/helpers.js:22:18)

您的错误表明您正在尝试 运行 您的打字稿文件 没有 打字稿。 import { x } from 'y'; 行在您的 node.js 版本中无效,并且假设您正在导入类型...打字稿会删除该行。

因此请确保您 运行 tsc 和 运行 您的 .js 文件,而不是 .ts 文件。